“SQLSTATE [23000]:具有有效约束的完整性约束违规”

时间:2012-03-29 22:19:23

标签: mysql doctrine symfony constraints foreign-key-relationship

我正在使用Symfony 2和Doctrine。

我有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引擎中创建的,我可以成功创建一个国家和地区。只有县实体才会发生错误。

由于

3 个答案:

答案 0 :(得分:1)

您的fixture文件可能正在尝试为County插入一行,而该行没有与accountId或districtId匹配的对应行。

  

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

此键强制您确保您输入County表的内容在account表中具有匹配的ID。

  

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

与accountId相同,但district表中没有匹配的ID。

因此请仔细检查您的灯具文件,并确保在插入县行之前插入(并提交)了分区和帐户行。

答案 1 :(得分:0)

实际上MySQL服务器5.6.33-79.0中存在一个错误 Percona Server(GPL),版本79.0,修订版2084bdb 在Linux(x86_64)

答案 2 :(得分:-3)

Unmpalled MAMP Pro并逐个安装了apache,mysql和php。同一个项目在这个新环境下工作