4

我有一个表Movie,它的 movieID 是主键,它的外键是表 Budget 中的 movieID。Movie 表有一个属性 MovieTitle,它是电影的名称。

我想知道如何删除以电影表中第一个字符“K”开头的行。

比如我想删除电影片名《天国》,但必须先删除Budge表中的外键。我想知道这种情况的命令是什么。

4

5 回答 5

4

我认为这将是您最好的选择。您应该有一个ON DELETE外键约束,一旦从您的表中删除,就会删除相应的记录。

DELETE FROM Movie WHERE SUBSTR(movieTitle, 1, 1) = 'K'
于 2012-09-04T14:22:02.253 回答
1

删除标题为“天国”的电影的所有记录,然后您也可以删除该电影。

SELECT movieID FROM Movie WHERE movieTitle = 'Kingdom of Heaven'

这将返回您的movieID,然后从第二个表中删除有关此ID 的记录

DELETE * FROM (secondTable) WHERE movieID = (value got from the first query)

现在,你终于可以删除电影了

DELETE * FROM Movie WHERE movieID = (value got from the first query)
于 2012-09-04T13:47:11.640 回答
0

比如我想删除电影片名《天国》,但必须先删除Budge表中的外键。我想知道这种情况的命令是什么。

通过在 Budge 中将引用电影的外键声明为ON DELETE CASCADE. 当您这样做时,删除电影将自动删除 Budge 中引用电影表的所有行。

要删除所有以“K”开头的电影(我认为这个想法实际上不太可能是您真正想要的),请使用以下内容。

delete from movie
where MovieTitle like 'K%';

指定整个标题安全,但您应该知道电影有时会共享标题。(《速度》、《逃亡者》、《泰坦尼克号》等)

delete from movie
where MovieTitle = 'Klute';

为了清楚您的意思是两部电影中的哪一部电影,当两部电影共享相同的标题时,请单独使用 MovieID,或同时使用标题和 id。(如果整个语句出现在日志文件中,如果您同时拥有标题和 ID 号,则更容易查看发生了什么。)

delete from movie
where MovieTitle = 'Titanic'
  and MovieID = 42;
于 2012-09-04T15:24:58.013 回答
0

我建议您使用类似下面的东西,以免在多用户环境中遇到肮脏的行为。意图 - 在您的删除声明期间不允许更改电影标题。

declare 
 lMovieRec Movie%rowtype;
begin
 select *
 into lMovieRec
 from movie
 where SUBSTR(movieTitle, 1, 1) = 'K'
 for update nowait;

 delete from Budge  WHERE movieID = lMovieRec.id;

 delete from movie WHERE ID = lMovieRec.id; 
end;
于 2012-09-04T14:42:41.960 回答
-1

尝试这个:

delete from Movie where MovieTitle like 'K%'
于 2012-09-04T13:49:25.403 回答