模式如下所示
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);帮帮我。
发布于 2014-02-27 22:31:15
您要插入的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);发布于 2017-04-20 03:48:06
为什么要让AUTO_INCREMENT指向受外键约束的列?请从country_id列中删除AUTO_INCREMENT,然后重试。
https://stackoverflow.com/questions/22071238
复制相似问题