SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束。踩坑

Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构。

解决方法是在Mysql中取消外键约束:  SET FOREIGN_KEY_CHECKS=0;  

然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入,

然后再设置外键约束: SET FOREIGN_KEY_CHECKS=1; 

查看当前FOREIGN_KEY_CHECKS的值可用如下命令

SELECT  @@FOREIGN_KEY_CHECKS;


今天在导入Excel的时候遇到的坑:


以前都是用Excel导入到本地的数据库表,用本地的sql表导入到服务器的sql表。


今天突然就想直接把Excel导入到服务器的sql表,因为服务器的sql表是有主外键关联的,我一般不会删,都是用SET FOREIGN_KEY_CHECKS=0; 把外键取消了,然后把本地的sql insert into table (cloumns1,cloumns2,cloumn3)select cloumns1,cloumns2,cloumn3 from table2 where id =‘20180622’;类似这样导入。然后启动外键关联 SET FOREIGN_KEY_CHECKS=1,然后修改数据,因为有时候数据总会不全的,不全的时候只能这么干。

好吧下面就是踩坑的开始,

我把Excel整理好把服务器的外键取消了,然后Excel导入一直提示外键关联错误,我想不是关了外键了吗,还报错,后来就去查资料,查了半天都是一样的答案都是说取消外键导入sql打开外键。后来无意间看到,有个博客上说,取消外键用工具取消的是当前页面的,后来我想了下,用Excel导入数据源都变了,应该都不算当前页面了吧,我就考虑把服务器上的sql表复制了一个,取消索引和外键,导入到这个没有外键和索引的表中,然后再取消外键,用表复制把这个表的数据导入到服务器上的正式表中,果然成功了,看来深入理解mysql机制很重要。如果知道关闭外键检查是关闭当前页的,也知道Excel导入会和当前页无关那么这个问题直接就解决了。 

你可能感兴趣的:(mysql,数据库)