【问题标题】:MySQL Foreign Key Constraint error 1452MySQL 外键约束错误 1452
【发布时间】:2018-02-15 02:54:39
【问题描述】:

我在向最近创建并与之建立关系的表中添加记录时遇到问题。我有一个名为 "sandbox2" 的数据库和一个名为 "country" 的表和另一个名为 "city" 的表。

“国家”表有列:

"id" (primary key)
"countryname"

“城市”表有以下列:

"cityid"
"cityname"
"cid" -->Foreign key

当我尝试使用 PHPmyadmin 插入工具将记录添加到 city 表时,我收到以下错误消息:

#1452 - 无法添加或更新子行:外键约束失败 (sandbox2.city, CONSTRAINT city_ibfk_1 FOREIGN KEY (cid) 更新级联时参考country (id)

SQL 查询:

INSERT INTO `city` (`cityid`, `city`, `cid`) VALUES (NULL, 'johnson', '122')

我查看了此站点上报告的类似问题,他们提到检查数据类型并确保它们相同;它们都是 INT 11 字符。我确实注意到我不知道是否相关的一件事是默认存储引擎设置为 My_ISAM,但是我的表是使用引擎 InnoDB 设置的(见图)。我无法将默认引擎更改为 InnoDB。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    在你下面查询:

    INSERT INTO `city` (`cityid`, `city`, `cid`) VALUES (NULL, 'johnson', '122')
    

    cityid 列是外键,因此不能为空。您必须为该列提供该值,该值应出现在国家/地区表的 id 列中。

    示例:

    国家表数据为:

    id  | countryname
    ------------------
    1   | US
    2   | Uk
    

    那么您只能使用 1 或 2 作为 cityid 列的值,除非其他值会给出相同的错误。

    但是根据您添加的最后一张图片,cid 是外键,您正尝试在该列中插入值 122。请确保您在国家/地区表中具有​​相同的 id。

    【讨论】:

    • 在“city”表中,“cid”被设置为外键。 “cityid”是设置一个主键。 “cityid”也设置为自动增量,所以当我插入新记录时我不应该将其保留为空吗?我最初在 city 表中有一些数据,但是当我看到 country 表中没有填充数据时,我删除了所有记录,因此两个表中目前都没有数据。
    • @Kevin 如果您没有数据,那么在这种情况下,您必须先在您的国家/地区表中插入一些数据。
    • 好吧,回顾一下,在将记录添加到第二个(外键)表之前,主键表需要在其中填充数据是有道理的。感谢您指出这一点!
    【解决方案2】:

    在您的描述中,您说 cityid 是您的外键。应该是cid。另外,我假设您有一个主键为 122 的国家/地区 ID?你能确认一下吗?

    【讨论】:

      猜你喜欢
      • 2014-04-08
      • 2013-11-17
      • 2012-01-08
      • 1970-01-01
      • 2013-11-15
      • 2014-09-10
      • 1970-01-01
      • 2012-12-22
      • 2018-09-15
      相关资源
      最近更新 更多