首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入到具有指向auto_increment列外键的子表中

问插入到具有指向auto_increment列外键的子表中
EN

Stack Overflow用户
提问于 2014-02-27 22:20:19
回答 2查看 1.4K关注 0票数 0

模式如下所示

代码语言:javascript
复制
           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='';

当我试图将数据插入到两个表中时,数据正在插入到父表中,但没有插入到子表中,错误是

代码语言:javascript
复制
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是在制造问题。

我试着像这样插入

代码语言:javascript
复制
       INSERT INTO country (country_name) VALUES ('US of A');

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

帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2014-02-27 22:31:15

您要插入的id必须存在于国家/地区表中,并且必须是国家/地区的有效id。

据推测,没有国家有id=2。

您可以使用函数mysql_insert_id()获取插入的id

所以它看起来像这样:

代码语言:javascript
复制
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赋给一个变量,然后插入该变量。

代码语言:javascript
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2017-04-20 03:48:06

为什么要让AUTO_INCREMENT指向受外键约束的列?请从country_id列中删除AUTO_INCREMENT,然后重试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22071238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档