我想创建两个表Publisher
和Book
。下面是创建表的SQL语句。
我想在Book表中创建一个外键约束。我不确定为什么会抛出这个错误。我反复核对了所有的括号。语法似乎很好,但它没有创建表。
CREATE TABLE Publisher
(
pub_name varchar2(128) PRIMARY KEY,
phone integer,
address varchar2(20)
);
CREATE TABLE Book
(
book_id integer NOT NULL PRIMARY KEY,
title varchar2(256),
pub_year number(4) UNSIGNED,
pub_name REFERENCES Publisher(pub_name) ON DELETE CASCADE ON UPDATE CASCADE
);
在Oracle中,没有UNSIGNED
和ON UPDATE CASCADE
。
SQL> CREATE TABLE Publisher(
2 pub_name varchar2(128) PRIMARY KEY,
3 phone integer,
4 address varchar2(20));
Table created.
SQL> CREATE TABLE Book(
2 book_id integer NOT NULL PRIMARY KEY,
3 title varchar2(256),
4 pub_year number(4),
5 pub_name REFERENCES Publisher(pub_name) ON DELETE CASCADE);
Table created.
SQL>
一个错误是on update cascade
。但是,这是第二个错误:
pub_year number(4) UNSIGNED,
因为这里不允许使用unsigned
,所以您可以使用约束:
pub_year number(4) check (pub_year > 0),
也就是说,您可能需要更具体的约束,例如:
pub_year number(4) check (pub_year > 1950 and pub_year < 2100),
注意,这将把年份表示为一个整数(在数字定义上有scale
,所以默认值是0
)。如果您尝试插入像2020.20这样的数字,那么该值将被截断,而不是生成错误。