1. 程式人生 > >SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外來鍵約束。踩坑

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匯入會和當前頁無關那麼這個問題直接就解決了。