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

最初に Rated テーブルからすべてを削除してから、films テーブルから削除してみてください。

定格から削除
WHERE ムービー ID = 16

フィルムから削除
WHERE ムービー ID = 16
于 2013-09-11T19:08:16.543 に答える