2012-02-03 85 views
0

下面的代碼,當被執行時產生以下錯誤:MySQL的ALTER TABLE作成: '完整性約束違規:1452'

致命錯誤:未捕獲的異常 'PDOException' 與消息「SQLSTATE [23000]:完整性約束違規: 1452無法添加或更新子行,外鍵約束失敗

$db->executeUpdate('CREATE TABLE submission_statuses (name VARCHAR(255) NOT NULL, 
        weight INT NOT NULL, PRIMARY KEY(name)) ENGINE = InnoDB'); 
$db->executeUpdate('ALTER TABLE submissions ADD CONSTRAINT IDX_4 
        FOREIGN KEY (status) REFERENCES submission_statuses(name)'); 
$db->executeUpdate('CREATE INDEX IDX_4 ON submissions (status)'); 

的表都使用InnoDB引擎。

+1

這與錯誤無關,但您應該知道不需要爲外鍵列添加索引。從MySQL 4.1.2開始,創建一個外鍵約束會自動創建一個索引,如果這個索引不存在的話。 – 2012-02-03 21:19:20

回答

4

submissions包含了status列不會在新創建的submission_statuses表中存在的值。在創建約束之前,必須填寫submission_statuses表。

+0

謝謝你,工作。 – kylex 2012-02-03 21:27:14

相關問題