2表:
CREATE TABLE movie (
ID int PRIMARY KEY,
name varchar2(50) NOT NULL
);
CREATE TABLE length (
ID int PRIMARY KEY REFERENCES movie(ID) ON DELETE CASCADE,
length int NOT NULL
);
所以我试图通过以下方式删除两者的值:
delete from movie where ID=1;
但得到错误:
"attempted to delete a parent key value that had a foreign dependency."
为什么我使用ON DELETE CASCADE?
答案 0 :(得分:1)
我认为您的关系存在错误。它似乎是“一对多”的关系,FK在lenght
表中,这意味着电影有很多长度。这是你的意思吗?
通常,length
可以作为表movie
的属性放置。但是如果你想把这个属性保存为一个单独的表,我建议你在你的表电影中创建一个引用表length
的FK。
CREATE TABLE movie (
ID int PRIMARY KEY,
name varchar2(50) NOT NULL,
CONSTRAINT fk_length
FOREIGN KEY (id_length)
REFERENCES length(ID)
ON DELETE CASCADE
);
CREATE TABLE length (
ID int PRIMARY KEY,
length int NOT NULL
);
答案 1 :(得分:0)
抱歉,我无法使用您在问题中提供的表格重现这一点。这是SQL * Plus中的一个会话:
SQL> CREATE TABLE movie (
2 ID int PRIMARY KEY,
3 name varchar2(50) NOT NULL
4 );
Table created.
SQL> CREATE TABLE length (
2 ID int PRIMARY KEY REFERENCES movie(ID) ON DELETE CASCADE,
3 length int NOT NULL
4 );
Table created.
SQL> insert into movie (id, name) values (1, 'Test');
1 row created.
SQL> commit;
Commit complete.
SQL> insert into length (id, length) values (1, 2);
1 row created.
SQL> commit;
Commit complete.
SQL> delete from movie where id=1;
1 row deleted.
SQL> select * from length;
no rows selected
我怀疑你length
表上的外键约束没有你认为它的ON DELETE CASCADE
子句。也许您之前没有使用此子句创建此表,当您尝试使用ON DELETE CASCADE
再次创建此表时,您没有注意到SQL Developer无法创建表? (第二次创建表会失败,因为该表已经存在。)
尝试删除length
表并再次创建。