Mysql
MySQL InnoDB 表接受不存在的外鍵
使用 EasyPHP 14.1 VC11 和 phpMyAdmin (4.1.4) 在我家的電腦上創建一個網站項目。根據 EasyPHP 管理頁面,MySQL 版本為 5.6.15。
在 Windows 7 64 位上工作。
我已經創建了我需要的表並在“關係視圖”(在“結構”選項卡上)中指定了每個外鍵。所有表都是 InnoDB,預設引擎設置為 InnoDB。
假設我有表
A
和B
,並且表B
的列有一個外鍵。ID``A
在 table 中插入一行時
B
,如果我在外鍵列上寫 0(零)並送出,它會接受。在“瀏覽”選項卡中,它顯示外鍵列值為 0(零)的行。
當我點擊該值(連結到表上的那一行
A
)時,我會以零結果轉到該表。在變數選項卡中,“
foreign key checks
”變數為“ON
”。但是沒有檢查外鍵,否則插入會失敗,因為 table 上沒有
ID
0A
。我做錯了什麼或忘記了什麼?請
SHOW CREATE TABLE yourtable\G
同時執行表 A 和表 B 並將其發佈在問題中。– 羅蘭多MySQLDBA表 A
CREATE TABLE `competicaogeral` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `Nome` varchar(190) NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `Nome` (`Nome`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
表 B
CREATE TABLE `competicao` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `Nome` varchar(190) NOT NULL, `CompeticaoGeral_ID` int(10) unsigned NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `Nome` (`Nome`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
請檢查
FOREIGN KEY
是否在您的表 B 的表設計中。例子
CREATE TABLE projects ( StaffID INT NOT NULL, ProjectName VARCHAR(20) NOT NULL, Allocation INT NOT NULL, PRIMARY KEY (StaffID, ProjectName) , FOREIGN KEY (StaffID) REFERENCES Staff(StaffID) ON DELETE CASCADE );
事實
- 表 A 是表
Staff
- 表 B 是表
projects
FOREIGN KEY (StaffID) REFERENCES Staff(StaffID) ON DELETE CASCADE
需要StaffID
inprojects
引用Staff
相同的行StaffID
您的原始問題
CREATE TABLE `competicao` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `Nome` varchar(190) NOT NULL, `CompeticaoGeral_ID` int(10) unsigned NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `Nome` (`Nome`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
你需要一個外鍵引用
CREATE TABLE `competicao` ( `ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `Nome` varchar(190) NOT NULL, `CompeticaoGeral_ID` int(10) unsigned NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `Nome` (`Nome`), FOREIGN KEY (CompeticaoGeral_ID) REFERENCES competicaogeral(ID) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
執行此操作的 SQL 將是
ALTER TABLE competicao ADD FOREIGN KEY (CompeticaoGeral_ID) REFERENCES competicaogeral(ID) ON DELETE CASCADE;
試一試 !!!