MySQL.csv加载失败,原因是;无法添加或更新子行:外键约束失败;
我正在尝试将带有棒球时间表的.csv文件加载到游戏表中。csv文件内容如下所示:MySQL.csv加载失败,原因是;无法添加或更新子行:外键约束失败;,mysql,sql,csv,load,Mysql,Sql,Csv,Load,我正在尝试将带有棒球时间表的.csv文件加载到游戏表中。csv文件内容如下所示: 5/17/2011,8:10 PM,14,13,Kansas City,MO 5/18/2011,8:10 PM,14,16,Chicago,IL 5/19/2011,8:10 PM,14,16,Chicago,IL 5/20/2011,7:05 PM,26,14,Columbus,OH 我尝试插入它们的sql语句是: LOAD DATA LOCAL INFILE 'c:/ftpsite/comp.csv' IN
5/17/2011,8:10 PM,14,13,Kansas City,MO
5/18/2011,8:10 PM,14,16,Chicago,IL
5/19/2011,8:10 PM,14,16,Chicago,IL
5/20/2011,7:05 PM,26,14,Columbus,OH
我尝试插入它们的sql语句是:
LOAD DATA LOCAL INFILE 'c:/ftpsite/comp.csv' INTO TABLE game
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(@DATE_STR, time, awayteam_id, hometeam_id,locationcity,locationstate)
SET date = STR_TO_DATE(@DATE_STR, '%c/%e/%Y');
但我得到了一个错误:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`gamelydb`.`game`, CONSTRAINT `hometeam_id_refs_id` FOREIGN KEY (`hometeam_id`) REFERENCES `team` (`id`))
哦,下面是对游戏桌的描述:
+---------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| date | date | NO | | NULL | |
| time | time | NO | | NULL | |
| hometeam_id | int(11) | NO | MUL | NULL | |
| awayteam_id | int(11) | NO | MUL | NULL | |
| locationcity | varchar(30) | NO | | NULL | |
| locationstate | varchar(20) | NO | | NULL | |
+---------------+-------------+------+-----+---------+----------------+
您应该禁用外键检查
SET foreign_key_checks = 0;
并在导入后将其切换回
SET foreign_key_checks = 1;
小心这个选项;)
您可以使用
设置外键检查=0禁用外键检查代码>输入前(确保在运行后使用设置外键\u checks=1;
将其设置回原位)
你真正应该做的是确保无论hometeam\u id
和awayteam\u id
指向哪个表,都有你要插入的值。如果团队表将数据插入到与游戏表相同的CSV中,请先做团队表,但情况并非如此
最后,您可以删除hometeam_id和awayteam_id上的外键,然后像下面的示例一样添加它们:
ALTER TABLE TABLE\u name DROP FOREIGN KEY TABLE\u name\u ibfk\u 1
下次使用show create TABLE game
。上面是desc game
,这样我们就可以完整地看到表定义。