mysql - 插入到具有 auto_increment 列外键的子表

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

帮帮我。

最佳答案

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

关于mysql - 插入到具有 auto_increment 列外键的子表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22071238/

相关文章:

mysql - CodeIgniter 别名列

mysql - 是否可以通过在 SQL 和 mySql 中具有数据库的内部连接从不同的数据库获取信息?

c# - 插入多行的最快方法

sql - 如何更改查询中的行信息?

mysql - 我应该有一张主装备表还是多张属性表?

php - 几个 PHP/MySQL 问题

php - 多次运行一个php脚本

mysql - 更新 - where 子句中的聚合函数

mysql - 'LIKE' 或 'NOT LIKE' 这就是问题所在

mysql - 以特定方式将数据复制到新表