我有一个表Movie,它的 movieID 是主键,它的外键是表 Budget 中的 movieID。Movie 表有一个属性 MovieTitle,它是电影的名称。
我想知道如何删除以电影表中第一个字符“K”开头的行。
比如我想删除电影片名《天国》,但必须先删除Budge表中的外键。我想知道这种情况的命令是什么。
我认为这将是您最好的选择。您应该有一个ON DELETE
外键约束,一旦从您的表中删除,就会删除相应的记录。
DELETE FROM Movie WHERE SUBSTR(movieTitle, 1, 1) = 'K'
删除标题为“天国”的电影的所有记录,然后您也可以删除该电影。
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)
比如我想删除电影片名《天国》,但必须先删除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;
我建议您使用类似下面的东西,以免在多用户环境中遇到肮脏的行为。意图 - 在您的删除声明期间不允许更改电影标题。
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;
尝试这个:
delete from Movie where MovieTitle like 'K%'