簡體   English   中英

插入到具有auto_increment列的外鍵的子表中

[英]Insert in to child table that have foreign key to an auto_increment column

架構如下圖所示

           CREATE TABLE `country` (
           `id` int(11) NOT NULL AUTO_INCREMENT,
            `country_name` varchar(45) DEFAULT NULL,
             PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

            CREATE TABLE `state_table` (
              `id` int(11),
              `state_name` varchar(45) DEFAULT NULL,
              `country_id` int(11) NOT NULL AUTO_INCREMENT,
               PRIMARY KEY (`country_id`),
               CONSTRAINT `country_fk` FOREIGN KEY (`country_id`) 
               REFERENCES `country` (`id`) ON DELETE CASCADE on update cascade
            ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='';

當我嘗試將數據插入兩個表時,數據正在插入到父表中,但沒有插入到子表中,並且這里的錯誤是

Schema Creation Failed: Cannot add or update a child row: a foreign key constraint fails (`db_2_3b712`.`state_table`, CONSTRAINT `country_fk` FOREIGN KEY (`country_id`) REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE): 

按照我的想法,使用country_id作為auto_increment會造成問題。

我試圖這樣插入

       INSERT INTO country (country_name) VALUES ('US of A');

       INSERT INTO state_table (state_name,id) VALUES
        ('Minnesota', 2),
        ('Arizona', 2);

幫我。

您要插入的ID必須存在於國家/地區表中,並且必須是國家/地區的有效ID。

可能沒有id = 2的國家/地區。

您可以使用函數mysql_insert_id()獲得插入的ID。

所以看起來像這樣:

INSERT INTO country (country_name) VALUES ('US of A');

 INSERT INTO state_table (state_name,id) VALUES
  ('Minnesota', mysql_insert_id()),
  ('Arizona', mysql_insert_id());

甚至更好的是,您可以將此ID分配給變量並將其插入。

INSERT INTO country (country_name) VALUES ('US of A');
$id = mysql_insert_id();

INSERT INTO state_table (state_name,id) VALUES
    ('Minnesota', $id),
    ('Arizona', $id);

為什么對外鍵約束列具有AUTO_INCREMENT country_id列中刪除AUTO_INCREMENT ,然后重試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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