2009-05-30 49 views
0

我有一個包含2個條目的表。有關在MySQL中插入外鍵約束的建議

喜歡的東西

CREATE TABLE `db`.`main` (
    `id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`) 
); 

id爲這2項自動生成的主密鑰。

我有另一個表與鏈接

CREATE TABLE `db`.`day` (
    `main_id` int(10) unsigned NOT NULL, 
    `day` tinyint(4) NOT NULL, 
    CONSTRAINT `fk_db_main` FOREIGN KEY (`main_id`) REFERENCES `main` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
); 

的規則,現在我可以成功地得到使用

SELECT * FROM main where id='9'; 

結果,但是當我嘗試運行

INSERT INTO day (main_id, day) VALUES (9, 0); 

我得到

「無法添加或更新子行:外鍵約束失敗(dbday,約束fk_db_main外鍵(main_id)參考文獻mainid)ON DELETE NO ACTION ON UPDATE NO ACTION)(1452)」

什麼我與插入缺失有什麼建議?

**我hadn在提問的時候沒有列出問題的實際原因,實際的原因是主數據庫表在MyISAM中,InnoDB表無法創建連接到它的外鍵。簡而言之,MyISAM不支持外鍵,即使它們來自其他表格。

+0

插入語句看起來不錯。 – 2009-05-30 02:51:33

+0

我很困惑,你認爲'主'表中有兩個'條目'。以我的想法,有一列 - 稱爲ID - 它也是表的主鍵。 – 2009-05-30 02:58:53

+1

另外,爲什麼你在SELECT中引用'9'?當你運行SELECT時會得到什麼結果? – 2009-05-30 03:00:04

回答

0

我在提問時沒有列出問題的實際原因。實際的原因是主數據庫表在MyISAM中,InnoDB表無法創建連接到它的外鍵。簡而言之,MyISAM不支持外鍵,即使它們來自其他表格。

1

FOREIGN KEY約束表示「應該有一個在'main'表中輸入一個ID值,該ID值與'day'表中新插入的'main_id'值相匹配。

當您將值9插入'日'時,ID爲9的'main'中是否已經有一行?

DBMS不這麼認爲 - 這就是爲什麼它會抱怨。

2

如果我刪除CREATE TABLE語句中的db.部分(並將main插入一行,並且id爲9),則該插入適用於我。也許問題在於你使用的前綴不一致,即在TABLE之後,但不在CONSTRAINT子句中......?