gpt4 book ai didi

mysql - Doctrine 异常的 1452 错误

转载 作者:行者123 更新时间:2023-11-30 23:30:14 25 4
gpt4 key购买 nike

我目前正在为 1452 错误(使用 Symfony2 和教义)而崩溃。

情况是这样的:我有 3 个表,Location、Concert 和 CD,正如预期的那样,一个 Concert 在一个 Location 举行,一张 CD 与一个 Concert 相关,其中包括一些外键。

这是 doctrine 生成的用于创建数据库的 SQL 查询:

CREATE TABLE CD (id INT AUTO_INCREMENT NOT NULL, concert INT NOT NULL, number INT NOT NULL, INDEX IDX_EB3C8BB0D57C02D2 (concert), PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE Concert (id INT AUTO_INCREMENT NOT NULL, location INT NOT NULL, date DATETIME NOT NULL, name VARCHAR(255) DEFAULT NULL, INDEX IDX_1AC13B4E5E9E89CB (location), PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE Location (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(40) NOT NULL, city VARCHAR(40) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
ALTER TABLE CD ADD CONSTRAINT FK_EB3C8BB0D57C02D2 FOREIGN KEY (concert) REFERENCES Concert(id) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE Concert ADD CONSTRAINT FK_1AC13B4E5E9E89CB FOREIGN KEY (location) REFERENCES Location(id) ON UPDATE CASCADE ON DELETE CASCADE;

事实是,插入Location是没有问题的,连接一个Concert,满足CD的外键:

INSERT INTO Location (id, name, city) VALUES (NULL, 'Church', 'Berlin');
INSERT INTO Concert (id, location, date, name) VALUES (NULL, '1', '2012-06-20 19:30:00', NULL);

但是如果我尝试插入 CD:

INSERT INTO  CD (id ,concert ,number) VALUES (NULL ,  '1',  '1');

我遇到了著名的错误:

Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`festival`.`cd`, CONSTRAINT `FK_EB3C8BB0D57C02D2` FOREIGN KEY (`concert`) REFERENCES `Concert` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

所以我尝试了一些技巧:

  1. 转义表 Location 和相关键的创建:

    CREATE TABLE CD (id INT AUTO_INCREMENT NOT NULL, concert INT NOT NULL, number INT NOT NULL, INDEX IDX_EB3C8BB0D57C02D2 (concert), PRIMARY KEY(id)) ENGINE = InnoDB;
    CREATE TABLE Concert (id INT AUTO_INCREMENT NOT NULL, location INT NOT NULL, date DATETIME NOT NULL, name VARCHAR(255) DEFAULT NULL, INDEX IDX_1AC13B4E5E9E89CB (location), PRIMARY KEY(id)) ENGINE = InnoDB;
    ALTER TABLE CD ADD CONSTRAINT FK_EB3C8BB0D57C02D2 FOREIGN KEY (concert) REFERENCES Concert(id) ON UPDATE CASCADE ON DELETE CASCADE;

    效果很好。

  2. 创建后删除表 Location(以及相关键):

    CREATE TABLE CD (id INT AUTO_INCREMENT NOT NULL, concert INT NOT NULL, number INT NOT NULL, INDEX IDX_EB3C8BB0D57C02D2 (concert), PRIMARY KEY(id)) ENGINE = InnoDB;
    CREATE TABLE Concert (id INT AUTO_INCREMENT NOT NULL, location INT NOT NULL, date DATETIME NOT NULL, name VARCHAR(255) DEFAULT NULL, INDEX IDX_1AC13B4E5E9E89CB (location), PRIMARY KEY(id)) ENGINE = InnoDB;
    CREATE TABLE Location (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(40) NOT NULL, city VARCHAR(40) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
    ALTER TABLE CD ADD CONSTRAINT FK_EB3C8BB0D57C02D2 FOREIGN KEY (concert) REFERENCES Concert(id) ON UPDATE CASCADE ON DELETE CASCADE;
    ALTER TABLE Concert ADD CONSTRAINT FK_1AC13B4E5E9E89CB FOREIGN KEY (location) REFERENCES Location(id) ON UPDATE CASCADE ON DELETE CASCADE;
    ALTER TABLE Concert DROP FOREIGN KEY FK_1AC13B4E5E9E89CB;
    ALTER TABLE Concert DROP INDEX IDX_1AC13B4E5E9E89CB;
    DROP TABLE Location;

    同样的错误。

  3. 逃避外键控制

    SET FOREIGN_KEY_CHECKS = 0;

    同样的错误。

最后两次尝试,让我想起链接 Concert-Location 上的一些索引问题?你懂的,我有点迷茫。

有没有人遇到过类似的事情?

非常感谢知识,

汤姆。

最佳答案

所以,

根据 MySQL documentation , 自 OSX 5.5.9 起的 MySQL 服务器,使用外键插入失败。这个错误似乎是区分大小写的。

有很多方法可以修复它(此列表并不详尽,某些选项可能无效):

  • 仅使用小写的表名。
  • 尝试设置lower_case_table_names为 O 或 1(但在 OS X 上,这并不总是可能导致系统区分大小写)。
  • 降级到 MySQL 服务器 5.5.8(我没有测试升级)。

Thanks to this thread .

关于mysql - Doctrine 异常的 1452 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11087715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com