插入具有auto_increment列的外键的子表

时间:2014-02-27 14:20:19

标签: mysql sql

架构如下所示

           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);

帮帮我。

2 个答案:

答案 0 :(得分:0)

您要插入的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);

答案 1 :(得分:0)

为什么AUTO_INCREMENT有外键约束列?从AUTO_INCREMENT列中删除country_id,然后重试。