2012-03-29 189 views
0

我正在使用Symfony 2和Doctrine。「SQLSTATE [23000]:完整性約束違規」與有效約束條件

我有4個班級:國家,地區,縣和地方。區擁有國家的外交鑰匙;縣有外地區;本地有一個區的外鍵。

的問題是,將一個縣(使用數據夾具)時,我得到的錯誤

SQLSTATE[23000]: Integrity constraint violation: 

我甩了SQL創建表和約束,並得到這個:

CREATE TABLE Country (id INT AUTO_INCREMENT NOT NULL, 
name VARCHAR(255) NOT NULL, 
insertedAt DATETIME NOT NULL, 
flag LONGTEXT DEFAULT NULL COMMENT '(DC2Type:object)', 
PRIMARY KEY(id)) ENGINE = InnoDB; 


CREATE TABLE County (id INT AUTO_INCREMENT NOT NULL, 
name VARCHAR(255) NOT NULL, 
insertedAt DATETIME NOT NULL, 
insertedBy INT NOT NULL, 
idDistrict INT NOT NULL, 
INDEX IDX_5F4EFA13438082DC (insertedBy), 
INDEX IDX_5F4EFA1362627EDC (idDistrict), 
PRIMARY KEY(id)) ENGINE = InnoDB; 


CREATE TABLE District (id INT AUTO_INCREMENT NOT NULL, 
name VARCHAR(255) NOT NULL, 
insertedAt DATETIME NOT NULL, 
insertedBy INT NOT NULL, 
idCountry INT NOT NULL, 
INDEX IDX_C8B736D1438082DC (insertedBy), 
INDEX IDX_C8B736D143CAA294 (idCountry), 
PRIMARY KEY(id)) ENGINE = InnoDB; 


CREATE TABLE LOCAL (id INT AUTO_INCREMENT NOT NULL, 
name VARCHAR(255) NOT NULL, 
insertedAt DATETIME NOT NULL, 
insertedBy INT NOT NULL, 
idCounty INT NOT NULL, 
INDEX IDX_4A17A7EC438082DC (insertedBy), 
INDEX IDX_4A17A7EC3BF357BF (idCounty), 
PRIMARY KEY(id)) ENGINE = InnoDB; 


ALTER TABLE County ADD CONSTRAINT FK_5F4EFA13438082DC 
FOREIGN KEY (insertedBy) REFERENCES Account(id); 


ALTER TABLE County ADD CONSTRAINT FK_5F4EFA1362627EDC 
FOREIGN KEY (idDistrict) REFERENCES District(id); 


ALTER TABLE District ADD CONSTRAINT FK_C8B736D1438082DC 
FOREIGN KEY (insertedBy) REFERENCES Account(id); 


ALTER TABLE District ADD CONSTRAINT FK_C8B736D143CAA294 
FOREIGN KEY (idCountry) REFERENCES Country(id); 


ALTER TABLE LOCAL ADD CONSTRAINT FK_4A17A7EC438082DC 
FOREIGN KEY (insertedBy) REFERENCES Account(id); 


ALTER TABLE LOCAL ADD CONSTRAINT FK_4A17A7EC3BF357BF 
FOREIGN KEY (idCounty) REFERENCES County(id); 

問題不在於DataFixture本身,因爲我試圖使用PhpMyAdmin插入一個縣,並得到相同的錯誤。

所有的表格都是在InnoDB引擎中創建的,我可以成功創建一個國家和地區。該錯誤只發生在縣實體。

感謝

+0

這就是爲什麼你應該手寫你的SQL .. ehh。無論如何。你有沒有注意到,「國家」表有兩個定義?如果您要提供數據,那麼它會很好,可以複製錯誤。 – 2012-03-29 23:05:59

+0

@tereško:沒有,一個國家是另一個國家(沒有r)。 – 2012-03-30 00:16:09

+0

哦,美國人。 – 2012-03-30 00:18:59

回答

-4

Unistalled MAMP Pro並逐一安裝apache,mysql和php。同一項目新的環境下工作

+17

我不認爲這是一個修復程序,或者正確回答你的問題。 – 2012-09-05 10:37:20

1

您的夾具文件可能試圖插入一行County對其中有沒有相應的行相匹配的帳戶ID或districtId。

ALTER TABLE縣添加約束FK_5F4EFA13438082DC 外鍵(insertedBy)參考賬戶(ID);

這個關鍵力量,你要確保你進入County表ACCOUNTID已在account表中的匹配ID。

ALTER TABLE縣添加約束FK_5F4EFA1362627EDC 外鍵(idDistrict)參考文獻區(ID);

與accountId相同,但district表中沒有匹配的ID。

因此,仔細檢查你的夾具文件,並確保在插入縣行之前插入(和提交)該區域和帳戶行。

+0

其實不...甚至編寫SQL插入語句我得到了錯誤。我從MAMP Pro恢復到MAMP(免費),所有人都開始工作了! (????) – 2012-03-30 01:17:29

+0

大聲笑,也許免費版運行'SET foreign_key_checks = 0;' – 2012-03-30 01:19:04

+0

我不認爲你真的修好了。 @邁克關於需要確保縣進入縣之前的答案可能是正確的答案。如果你沒有解決這個問題,它會再次出現並且再次咬你。 – Cerad 2012-03-30 14:40:04

0

居然有在Linux中下(x86_64)的MySQL服務器5.6.33-79.0 的Percona服務器(GPL),版本79.0的錯誤,修訂2084bdb

+0

你能提供更多關於這個bug的信息嗎? – 2017-03-24 18:11:04

+0

當然可以。如果您創建一個外鍵,但是您在目標表上沒有自動增量,則會出現問題。不知何故,這是可行的,但我無法確切地知道,這在單位測試中發生。 刪除Foreing Key幫助。 – 2017-03-30 09:29:58

相關問題