我有一个表电影,其中movieID是主键,其外键是表Budget中的movieID。 Movie表有一个属性MovieTitle,它是电影的名称。
我想知道如何删除以电影表格中第一个字符“K”开头的行。
例如,我想删除电影标题“天国”,但我必须首先删除Budge表中的外键。我想知道这种情况的命令是什么。
答案 0 :(得分:3)
我认为这是你最好的选择。您应该有一个ON DELETE
外键约束,一旦从表中删除就会删除相应的记录。
DELETE FROM Movie WHERE SUBSTR(movieTitle, 1, 1) = 'K'
答案 1 :(得分: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)
答案 2 :(得分: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;
答案 3 :(得分: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;
答案 4 :(得分:-1)
试试这个:
delete from Movie where MovieTitle like 'K%'