【问题标题】:MySQL #1452 - Cannot add or update a child rowMySQL #1452 - 无法添加或更新子行
【发布时间】:2017-05-28 06:01:05
【问题描述】:

我是初学者,我要做的就是插入一个作为外键的表字段,请看一下这两个表:

表格类别

CREATE TABLE IF NOT EXISTS `categorie` (
    `id_cat` int(2) NOT NULL AUTO_INCREMENT,   
    `nom_cat` varchar(20) NOT NULL,   
    PRIMARY KEY (`id_cat`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

和表Annonce

CREATE TABLE IF NOT EXISTS `annonce` (
  `id_annonce` int(6) NOT NULL AUTO_INCREMENT,
  `titre` varchar(30) NOT NULL,
  `description` varchar(255) NOT NULL,
  `tarif` float NOT NULL,
  `deplacement` int(2) NOT NULL,
  `date_creation` date NOT NULL,
  `date_expiration` date NOT NULL,
  `image` varchar(255) NOT NULL,
  `id_cat` int(2) DEFAULT NULL,
  PRIMARY KEY (`id_annonce`),
  KEY `id_cat` (`id_cat`),
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

在手动链接外键 id_cat 之后(ON UPDATE SET NULL ON DELETE CASCADE),这就是数据库的样子

在将数据插入到类别表中后,它看起来像这样

但不幸的是,我无法执行此查询:

INSERT INTO annonce (id_annonce, titre, description, tarif, deplacement, 
                    date_creation, date_expiration,id_cat) 
VALUES('','anything','anything',2,3,'2017-04-01','2017-04-01',2)

错误说:

1452 - 无法添加或更新子行:外键约束失败 (lametcom.annonce, 约束 annonce_ibfk_2 外键 (id_cat) 参考annonce (id_cat) ON DELETE SET NULL ON UPDATE CASCADE)

谁能帮帮我,很抱歉我的英语不好,希望你能明白我的意思

【问题讨论】:

  • 将空字符串插入非空列。省略该列并让自动增量担心它:INSERT INTO annonce (titre, description, tarif, deplacement, date_creation, date_expiration,id_cat) VALUES('anything','anything',2,3,'2017-04-01','2017-04-01',2)
  • 感谢提示,我不知道它是否有效;)

标签: mysql database phpmyadmin innodb easyphp


【解决方案1】:

你的外键约束是错误的。你有

FOREIGN KEY id_cat REFERENCES annonce (id_cat)

但应该是:

FOREIGN KEY id_cat REFERENCES categorie (id_cat)

外键约束中的表名必须是您要链接的表。

【讨论】:

  • 非常感谢,我觉得犯这种错误太愚蠢了:D
猜你喜欢
  • 2012-02-06
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2014-07-27
相关资源
最近更新 更多