iT邦幫忙

0

mysql 1215 cannot add foreign key constraint !!!

最近接了一個案子要幫忙轉一個magento2的網頁到aws.
客戶給了一個source code 和 幾個sql files.

因為SQL太大了,所以分成好幾個 1.sql,2,sql,3.sql,4.sql,5.sql files.
我import 第一個是沒問題,不過當我import 第二個時就會出現
create tablea時發生 MySQL error code 1215: “Cannot add foreign key constraint”.

網上找了很久。
試過把 set foreign_key = 0 也 沒有用。
我也試用先import 2.sql 在 import 1.sql 改變一下次序。發現,如果在空的database是沒有報錯。

2 個回答

2
raytracy
iT邦大神 1 級 ‧ 2020-07-27 21:41:44

這裡綜整了 13 種原因, 先從第一種開始檢查吧:
MySQL Error Code 1215: “Cannot add foreign key constraint”

可能會得到一個「沒有幫助」
/images/emoticon/emoticon25.gif

ckp6250 iT邦研究生 4 級 ‧ 2020-07-28 10:02:33 檢舉

該13條規則中,我最常遇到的是


7)Different charsets/collations among the two table/columns

兩個表/列之間的字符集/排序規則不同
2
一級屠豬士
iT邦大師 1 級 ‧ 2020-07-28 08:46:05

mysqldump 出來的檔案,檔頭會有一段相容設定,檔尾也會有一段.
推測你的案例可能是受限於 email 單次size限制,對方使用 split 來切割.
你可以用 cp a1+a2+a3 total 這樣的方式,合併起來, 或是 cat a1 a2 a3 > total 這樣.
也可以補那段相容設定到每個檔案頭部跟尾巴(或是建立一個相容設定的檔案,然後append dump sql , 補上檔尾,轉向到新檔案,方法很靈活啦,看怎樣做比較適合個人手頭上機器有的指令,或是思維的慣性,沒有絕對),再依序執行.

檔頭可能長這樣

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

檔尾可能長這樣

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

另外,最好是有互動啦,像網路上這樣,畢竟不如現場.
不要射後不理,這樣不利於以後的人查找資料.這個案例是有解決嗎? 這個回答能不能用?
這才是重點啦.

看更多先前的回應...收起先前的回應...

/images/emoticon/emoticon25.gif

海綿寶寶 通靈王不通靈一下

其實如果他寫出 query was 後面的 SQL statement
會比較有幫助

昨晚我們一群人在自我安慰
至少我們可以睡得著覺
那兩個中15億的傢伙
一定失眠一整晚了
/images/emoticon/emoticon11.gif

ckp6250 iT邦研究生 4 級 ‧ 2020-07-28 09:56:40 檢舉

誠祝海大永遠不失眠,
永遠睡得著覺。

把create table, intert table 和 alter table 都分成不同的sql files 按次序去import 就沒問題了。

謝謝大家的幫忙。

另外如果 直接把他們cat 在同一個file 入面,但因為ordering 是錯了,所以還是會出錯error.
只能說是sql dump 的時侯不知道出現了什麼問題才會這樣。

資料庫的備份還原是有很多地方要小心的.
這也是一個很好的參考案例.

我要發表回答

立即登入回答