我对sql开发人员很新鲜。我不确定规则。当我按照老师的例子来实践创建一个小型库数据库时,我对每个带有外键的表都有错误。我检查一下这个例子,我确信我没有错过括号。我感到很困惑。请帮忙!
create table Publisher
(Pname VARCHAR(25) not null ,
Address varchar(25) not null,
Phone char(10),
PRIMARY KEY (Pname));
create table Book
(Book_id int not null,
Title varchar(20),
Publisher_name varchar(25) ,
primary KEY (Book_id),
foreign key (Publisher_name) references Publisher(Pname)
ON DELETE CASCADE ON UPDATE CASCADE);
错误报告显示在“缺少右括号”的第一个级联和第二个之间。但我不这么认为。类似的问题发生在所有其他类似的构造。我的sql开发人员是mac的最新版本。
答案 0 :(得分:2)
我假设您每次更改Book
表中的Pname
列时都会尝试确保更新Publisher
记录,但Oracle没有on update cascade
}。
有关references
子句的语法图,请参阅here。
要更改Oracle中的主键,您有以下几种选择:
Defer the constraint(外键)检查直到提交,然后在事务中更新父和子。
使用更新的详细信息创建 new 父级,然后更改所有子级,然后删除原始父级。当然,所有这些都在交易中。
停止使用可变数据作为密钥。 DBA花了很长时间才说服我应该使用人工(代理)密钥而不是真正的数据,但这是最终赢得我的用例。使用人工密钥(永远不必改变)意味着这个问题完全消失。