0

我想创建两个表PublisherBook. 以下是用于创建表的 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
);
4

2 回答 2

0

一个错误是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 这样的数字,则该值将被截断,而不是产生错误。

于 2021-01-16T14:21:15.743 回答
0

在 Oracle 中,没有UNSIGNEDnor 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>
于 2021-01-16T07:08:31.600 回答