![](/img/trans.png)
[英]How do I insert primary key value from one table to foreign key column in another?
[英]How to insert Primary Key value of the primary table to the Foreign Key column of the child table in MySQL?
您好,我是 PHP 和 MYSQL 的初學者。 我做了兩張桌子。 主表“客戶”是:
id | name | place | email
1 bob berlin bob@bob.com
2 kary dresden kary@kary.com
3 sam zurich sam@sam.com
我的子表 'orders' 其中 'menu_id' 是外鍵是:
id | menu_name | menu_id | date_of_order
1 sandwich 2 2016-05-03
2 fruits 3 2016-05-02
3 pizza 1 2016-05-04
4 salad 1 2016-05-06
現在通過一個簡單的 LEFT JOIN,我可以看到哪個客戶在哪個日期下了哪些訂單。
但問題是,如果在我的“客戶”表中添加新用戶,我無法將其“id”作為外鍵插入到“menu_id”列中。
在這之后假設我做
INSERT INTO customers (name, place, email) VALUES ('joe', 'melbourne', 'joe@xyz.com')
在我做的訂單表中
INSERT INTO orders(menu_name, menu_id, date_of_order)
VALUES('pizza', 'SELECT id FROM customers WHERE email = joe@xyz.com', '2016-05-09')
在此之后,“訂單”表看起來像
id | menu_name | menu_id | date_of_order
1 sandwich 2 2016-05-03
2 fruits 3 2016-05-02
3 pizza 1 2016-05-04
4 salad 1 2016-05-06
5 pizza 0 2016-05-09
'orders' 表中的 menu_id 應該顯示為 '4' 而不是 0。我也試過 LAST_INSERT_ID() 但它得到的值仍然是 0。我不知道為什么會發生這種情況。 請幫忙
你的問題是你做錯了
INSERT INTO orders(menu_name, menu_id, date_of_order) VALUES('pizza', 'SELECT id FROM customers WHERE email = joe@xyz.com', '2016-05-09')
應該
INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('pizza', (SELECT `id` FROM `customers` WHERE `email` = 'joe@xyz.com' limit 1), '2016-05-09');
所以你基本上試圖插入'SELECT id FROM customers WHERE email = joe@xyz.com'
作為轉換為 int 的字符串(如果你有它作為 int)
創建語句:
CREATE TABLE `customers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(245) DEFAULT NULL,
`place` varchar(245) DEFAULT NULL,
`email` varchar(245) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`menu_name` varchar(245) DEFAULT NULL,
`menu_id` int(11) DEFAULT NULL,
`date_of_order` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK orders menu_id customer id_idx` (`menu_id`),
CONSTRAINT `FK orders menu_id customer id` FOREIGN KEY (`menu_id`)
REFERENCES `customers` (`id`)
ON DELETE SET NULL ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
你插入:
INSERT INTO `customers` (`name`, `place`, `email`) VALUES ('bob', 'berlin', 'bob@bob.com');
INSERT INTO `customers` (`name`, `place`, `email`) VALUES ('kary', 'dresden', 'kary@kary.com');
INSERT INTO `customers` (`name`, `place`, `email`) VALUES ('sam', 'zurich', 'sam@sam.com');
INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('sandwich', (SELECT id FROM customers WHERE email = 'kary@kary.com' limit 1), '2016-05-09');
INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('fruits', (SELECT id FROM customers WHERE email = 'sam@sam.com' limit 1), '2016-05-09');
INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('pizza', (SELECT id FROM customers WHERE email = 'bob@bob.com' limit 1), '2016-05-09');
INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('salad', (SELECT id FROM customers WHERE email = 'bob@bob.com' limit 1), '2016-05-09');
INSERT INTO `customers` (`name`, `place`, `email`) VALUES ('joe', 'melbourne', 'joe@xyz.com');
INSERT INTO `orders`(`menu_name`, `menu_id`, `date_of_order`) VALUES('pizza', (SELECT id FROM customers WHERE email = 'joe@xyz.com' limit 1), '2016-05-09');
和結果
mysql> select * from customers;
+----+------+-----------+---------------+
| id | name | place | email |
+----+------+-----------+---------------+
| 1 | bob | berlin | bob@bob.com |
| 2 | kary | dresden | kary@kary.com |
| 3 | sam | zurich | sam@sam.com |
| 4 | joe | melbourne | joe@xyz.com |
+----+------+-----------+---------------+
4 rows in set (0.02 sec)
mysql> select * from orders;
+----+-----------+---------+---------------+
| id | menu_name | menu_id | date_of_order |
+----+-----------+---------+---------------+
| 1 | sandwich | 2 | 2016-05-09 |
| 2 | fruits | 3 | 2016-05-09 |
| 3 | pizza | 1 | 2016-05-09 |
| 4 | salad | 1 | 2016-05-09 |
| 5 | pizza | 4 | 2016-05-09 |
+----+-----------+---------+---------------+
5 rows in set (0.02 sec)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.