【发布时间】:2014-06-23 05:10:20
【问题描述】:
我有一个 BASH 程序,可以插入我的 DB somes 行。 不幸的是,当MYSQL遇到错误(尤其是外键约束错误)时,整个SQL请求都停止了。
有没有办法跳过外键约束不适用的行,继续添加其他行?
insertVtigerInfos() {
$mysql -h $db_address -u $db_user -p$db_passwd $db_name -e "delete from $db_vtiger_name;load data local infile '$vtiger_temporary_file' REPLACE INTO TABLE $db_vtiger_name fields terminated by ';'"
}
----------------------démarrage---------------------------------
Tue May 6 16:03:13 CEST 2014
ERROR 1452 (23000) at line 1: Cannot add or update a child row: a foreign key constraint fails (`RH2QUALIF`.`info_vtiger`, CONSTRAINT `info_vtiger_ibfk_1` FOREIGN KEY (`nom_caisse`) REFERENCES `definition_ip_switch` (`nom_caisse`) ON DELETE CASCADE ON UPDATE CASCADE)
-------------------------fin------------------------------------
Tue May 6 16:03:14 CEST 2014
使用示例更新线程: 外键约束适用的表:
+-------------+------------+
| nom_caisse | quat_octet |
+-------------+------------+
| BCP | NULL |
| CEA | NULL |
具有外键约束的表:
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| code_site | varchar(32) | NO | PRI | NULL | |
| nom_caisse | varchar(32) | NO | MUL | NULL | |
| ip_routeur | varchar(32) | NO | | NULL | |
正在尝试插入的数据:
131001M0;CEA;<ip>
131001G0;CEALS;<ip>
当mysql尝试插入行时,第一个可以,第二个不行(因为CEALS不在外键所在的表中。 但是mysql没有添加任何行,因为他发现一个不匹配...我只是希望它添加第一行...
【问题讨论】:
-
尝试
SET FOREIGN_KEY_CHECKS = 0;但在执行脚本后将其设置为 1 -
这将添加所有行,即使是不匹配的行。我只希望mysql在发现外键错误后继续运行
-
根据docs 将 foreign_key_checks 设置为 1 不会触发对现有表数据的扫描。因此,在 foreign_key_checks = 0 时添加到表中的行将不会进行一致性验证
-
--force 选项不关心外键错误。它仍然停止
标签: mysql bash foreign-keys constraints