当我尝试从我的数据库中删除一部电影时,我得到了上述错误。我相信我有一些如何使得额定表优先于电影表。 如何使电影表优先于额定表
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`);
答案 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