MENU

mysql使用truncate清空表有外键问题

January 21, 2021 • Read: 1841 • 常见报错

(mysql 禁用和启用外键)

mysql多个表之前存在外键关联时,清空数据报错,如下:

TRUNCATE TABLE security_data
> 1701 - Cannot truncate a table referenced in a foreign key constraint (`scb-dev`.`identify_result`, CONSTRAINT `identify_result_ibfk_2` FOREIGN KEY (`SECURITY_DATA_ID`) REFERENCES `scb-dev`.`security_data` (`ID`))
> 时间: 0.001s

解决方法:删除时先禁用外键,然后再启动外键

-- 禁用外键约束.

SET FOREIGN_KEY_CHECKS=0;

注意:这个语句只是会话级的,只能在这个会话操作导入数据,删除数据之类的操作。再打开新的会话,外键还是启用着生效的。
-- 清除表内容,并且自动递增从1开始.

truncate table campaigns

-- 启动外键约束.

SET FOREIGN_KEY_CHECKS=1;

注意:或者直接把当前会话关闭了,再新开会话,外键就是启用的

-- 查看当前FOREIGN_KEY_CHECKS的值可用如下命令
SELECT @@FOREIGN_KEY_CHECKS;

@@FOREIGN_KEY_CHECKS=0(禁用外键)

@@FOREIGN_KEY_CHECKS=1(启用外键)

兼总条贯 知至知终

无标签