2011-09-01 128 views
1

我試圖創建一個新的表關係,但我似乎得到了一個錯誤,我不知道爲什麼。我做的第一個關係(一對多)是上週的,它工作的很好,也許我從那以後忘了正確的程序?創建關係:#1452 - 無法添加或更新子行:外鍵約束失敗

簡單的解釋: 我有三個表 - 事件,music_styles,場館

到目前爲止,我正確鏈接事件和場館的方式,一個場所可以鏈接到它的多個事件。我嘗試製作一張新表,每張音樂風格都有一行,並在表'事件'中使用一個ID,這樣我就可以將每個事件鏈接到音樂風格ID。

然而,這是我得到的錯誤:

SQL查詢:

ALTER TABLE events添加外鍵(MUSIC_STYLE_ID)參考文獻 nightl7_completemusic_stylesMUSIC_ID)ON DELETE NO ACTION ON UPDATE NO ACTION;

MySQL表示:文件

1452 - 不能添加或更新子行:外鍵約束

失敗(nightl7_complete/#sql-2721_c0dcfd,約束 #sql-2721_c0dcfd_ibfk_2外鍵(MUSIC_STYLE_ID)參考文獻 music_stylesMUSIC_ID)ON DELETE沒有行動更新沒有行動) 文檔錯誤ALTER TABLE events ADD FOREIGN KEY( MUSIC_STYLE_ID)參考文獻nightl7_completemusic_stylesMUSIC_ID)ON DELETE NO ACTION ON UPDATE NO ACTION;

這是我做了:)

enter image description here

I uploaded a full sized image here

謝謝大家:)程序


編輯:

所以我這樣做:

$query = 'SELECT e.* FROM events e '. 
    'LEFT JOIN nightl7_complete.music_styles ms ON ms.ID = e.MUSIC_STYLE_ID'. 
    'WHERE ms.id IS NULL'; 
$result = mysql_query($query); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

,並得到這個:

查詢無效:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的正確語法手冊在行「ms.id IS NULL」 1

回答

2

難道你要鏈接到MUSIC_STYLE_IDID,不MUSIC_ID

另外,您需要預先填寫MUSIC_STYLE_ID,其中music_styles的有效ID可以在創建外鍵之前設置爲空。

爲了驗證這一點,請嘗試:

SELECT e.* 
    FROM events e 
    LEFT JOIN nightl7_complete.music_styles ms ON ms.ID = e.MUSIC_STYLE_ID 
    WHERE ms.id IS NULL; 

如果該查詢返回任何記錄,這些都是在events項目不包含在music_styles

+0

喜道格相應的記錄,我做了預填充music_styles表有68排。我按照你的建議使用ID,我仍然有同樣的錯誤。 #1452 - 無法添加或更新子行:外鍵約束失敗('nightl7_complete /#sql-2721_c1caae',CONSTRAINT'#sql-2721_c1caae_ibfk_2' FOREIGN KEY('MUSIC_STYLE_ID')REFERENCES'music_styles'('ID')ON DELETE NO ACTION ON UPDATE NO ACTION) – pufAmuf

+0

因此,對於'events'中的每一行,'MUSIC_STYLE_ID'中的值在'music_styles.id'中可用?我會修改我的問題,並用建議的查詢來檢查這個... –

+0

我刪除了列MUSIC_STYLE_ID,並且由於music_styles.ID已經編入索引,我以爲我可以將它用作外鍵? – pufAmuf

相關問題