无法删除或更新父行

时间:2013-09-11 19:02:04

标签: mysql sql

当我尝试从我的数据库中删除一部电影时,我得到了上述错误。我相信我有一些如何使得额定表优先于电影表。 如何使电影表优先于额定表

DELETE FROM  `film`.`films` WHERE  `films`.`movie_id` =16

--
-- Table structure for table `films`
--

CREATE TABLE IF NOT EXISTS `films` (
  `movie_id` int(4) NOT NULL AUTO_INCREMENT,
  `movie_title` varchar(100) NOT NULL,
  `actor` varchar(100) NOT NULL,
  PRIMARY KEY (`movie_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;


CREATE TABLE IF NOT EXISTS `rated` (
  `rated_id` int(4) NOT NULL AUTO_INCREMENT,
  `rated_name` varchar(40) NOT NULL,
  `movie_id` int(4) DEFAULT NULL,
  PRIMARY KEY (`rated_id`),
  KEY `movie_id` (`movie_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


ALTER TABLE `rated`
  ADD CONSTRAINT `rated_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `films` (`movie_id`);

3 个答案:

答案 0 :(得分:3)

默认情况下,您在movie_id上定义的外键会限制删除:使用当前架构,只要有影片,就无法删除影片。

使用级联删除删除电影时,您可以自动删除评级。这是否是您申请的最佳选择,由您决定......

ALTER TABLE `rated` ADD FOREIGN KEY (`movie_id`) 
          REFERENCES `films` (`movie_id`) ON DELETE CASCADE;

答案 1 :(得分:0)

由于存在外键约束,您必须先删除所有子记录,然后才能删除父记录。

答案 2 :(得分:0)

首先尝试从“评级表”中删除所有内容,然后从电影表中删除。

DELETE FROM Rated
WHERE Movie_ID = 16

DELETE FROM Films
WHERE Movie_ID = 16