3

当我尝试从数据库中删除电影时,出现上述错误。我相信我有一些如何使评级表优先于电影表。如何使电影表优先于额定表

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`);
4

3 回答 3

3

默认情况下,您定义的外键movie_id限制了删除:使用当前模式,只要电影有评级,您就不能删除它。

当您使用级联删除删除影片时,您可以自动删除评级。这是否是您应用程序的最佳选择由您决定...

ALTER TABLE `rated` ADD FOREIGN KEY (`movie_id`) 
          REFERENCES `films` (`movie_id`) ON DELETE CASCADE;
于 2013-09-11T19:06:09.847 回答
0

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

于 2013-09-11T19:06:21.900 回答
0

尝试先从额定表中删除所有内容,然后从电影表中删除。

从额定值中删除
电影 ID = 16

从电影中删除
电影 ID = 16
于 2013-09-11T19:08:16.543 回答