簡體   English   中英

MySQL中如何將主表的Primary Key值插入到子表的Foreign Key列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM