当前位置: 首页 > 面试题库 >

无法删除或更新父行:外键约束失败

戚翰飞
2023-03-14
问题内容

进行时:

DELETE FROM `jobs` WHERE `job_id` =1 LIMIT 1

错误:

#1451 - Cannot delete or update a parent row: a foreign key constraint fails 
(paymesomething.advertisers, CONSTRAINT advertisers_ibfk_1 FOREIGN KEY 
(advertiser_id) REFERENCES jobs (advertiser_id))

这是我的桌子:

CREATE TABLE IF NOT EXISTS `advertisers` (
  `advertiser_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `password` char(32) NOT NULL,
  `email` varchar(128) NOT NULL,
  `address` varchar(255) NOT NULL,
  `phone` varchar(255) NOT NULL,
  `fax` varchar(255) NOT NULL,
  `session_token` char(30) NOT NULL,
  PRIMARY KEY (`advertiser_id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;


INSERT INTO `advertisers` (`advertiser_id`, `name`, `password`, `email`, `address`, `phone`, `fax`, `session_token`) VALUES
(1, 'TEST COMPANY', '', '', '', '', '', '');

CREATE TABLE IF NOT EXISTS `jobs` (
  `job_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `advertiser_id` int(11) unsigned NOT NULL,
  `name` varchar(255) NOT NULL,
  `shortdesc` varchar(255) NOT NULL,
  `longdesc` text NOT NULL,
  `address` varchar(255) NOT NULL,
  `time_added` int(11) NOT NULL,
  `active` tinyint(1) NOT NULL,
  `moderated` tinyint(1) NOT NULL,
  PRIMARY KEY (`job_id`),
  KEY `advertiser_id` (`advertiser_id`,`active`,`moderated`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;


INSERT INTO `jobs` (`job_id`, `advertiser_id`, `name`, `shortdesc`, `longdesc`, `address`, `active`, `moderated`) VALUES
(1, 1, 'TEST', 'TESTTEST', 'TESTTESTES', '', 0, 0);

ALTER TABLE `advertisers`
  ADD CONSTRAINT `advertisers_ibfk_1` FOREIGN KEY (`advertiser_id`) REFERENCES `jobs` (`advertiser_id`);

问题答案:

照原样,必须先删除Advertisers表中的行,然后才能删除它引用的Jobs表中的行。这个:

ALTER TABLE `advertisers`
  ADD CONSTRAINT `advertisers_ibfk_1` FOREIGN KEY (`advertiser_id`) 
      REFERENCES `jobs` (`advertiser_id`);

…实际上与应有的相反。实际上,这意味着您必须在作业表中有一条记录,然后才是广告商。因此,您需要使用:

ALTER TABLE `jobs`
  ADD CONSTRAINT `advertisers_ibfk_1` FOREIGN KEY (`advertiser_id`) 
      REFERENCES `advertisers` (`advertiser_id`);

纠正外键关系后,您的delete语句将起作用。



 类似资料:
  • 我还在学习hibernate中的很多东西,以及如何处理hibernate中表与表之间的关系,所以在我的一个项目中,我面临着以下问题: 问题出在哪里? 我想做什么? 我正在尝试删除package实体,但不删除package表中引用的用户 我正在通过packageDAO对package实体调用delete

  • 我将按id删除对象,但出现如下错误: com。mysql。jdbc。例外情况。jdbc4。MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(,constraint外键()引用) 我按id删除的方法是: 我的表的映射看起来像: Selection.java 作业Audit.java 审核组。JAVA AssignmentAudit

  • 我在这里使用了多对一双向关系,一旦我被放入数据库,我就不能删除文件,如果我试图删除,我会遇到异常,无法删除或更新父行:外键约束失败。 这是我的另一个实体类... 嗨这是我的完整栈迹

  • 问题内容: 我正在研究一个基本示例来测试操作,但出现异常。 我有以下实体: Employee.java EmpDetails.java 现在我在数据库中有员工ID为10的记录,在员工详细信息表中有相应的记录。 现在,当我在查询下面运行时: 我在想hibernate将删除员工记录和相应的员工详细信息记录,因为我已设置要删除的层叠类型。但我得到异常为: 引起原因:com.mysql.jdbc.exce

  • 现在,当我运行命令php artisan migrate时出现问题,它成功地迁移了我的所有表,但当我运行rollback命令时,它会抛出错误,错误是出于我的目的 我的专业移民: 即使我使用onDelete(“cascade”),我也不知道问题出在哪里。我们将非常感谢您的帮助!

  • 我正在处理一个测试操作的基本示例,但我得到了异常。 我有以下实体: 有人能帮助我如何测试级联删除选项在这里吗?