ORACLE CREATE TABLE 出现 FOREIGN KEY 错误

ORACLE CREATE TABLE with FOREIGN KEY error

我是 Oracle 的初学者,在使用外键创建 table 时遇到问题,我也创建了父 table region 并且一直收到同样的错误。我研究了 W3school 并使用了相同的语法,但仍然没有帮助。

CREATE TABLE region(
    region_id INTEGER NOT NULL PRIMARY KEY,
    region_name VARCHAR2(20)
);
CREATE TABLE warehouse(
    warehouse_id INTEGER NOT NULL PRIMARY KEY,
    warehouse_address VARCHAR2(20),
    warehouse_postcode VARCHAR2(8),
    warehouse_phonenm INTEGER,
    region_id FOREIGN KEY REFERENCES region(region_id)
);

您需要声明列 region_id,然后对其施加外键约束:

CREATE TABLE warehouse(
    warehouse_id INTEGER NOT NULL PRIMARY KEY,
    warehouse_address VARCHAR2(20),
    warehouse_postcode VARCHAR2(8),
    warehouse_phonenm INTEGER,
    region_id INTEGER,
    constraint warehouse_region_id_fk FOREIGN KEY (region_id) REFERENCES region(region_id)
);

或者您可以使用短路语法,也就是内联约束语法(在这种情况下,Oracle 将为约束分配一个默认名称):

CREATE TABLE warehouse(
    warehouse_id INTEGER NOT NULL PRIMARY KEY,
    warehouse_address VARCHAR2(20),
    warehouse_postcode VARCHAR2(8),
    warehouse_phonenm INTEGER,
    region_id integer REFERENCES region(region_id)
);

如果要内联声明外键约束,请保留“FOREIGN KEY”。

CREATE TABLE warehouse(
warehouse_id INTEGER NOT NULL PRIMARY KEY,
warehouse_address VARCHAR2(20),
warehouse_postcode VARCHAR2(8),
warehouse_phonenm INTEGER,
region_id REFERENCES region(region_id));

有几种可能性。

先掌握table:

SQL> CREATE TABLE region(
  2  region_id INTEGER NOT NULL PRIMARY KEY,
  3  region_name VARCHAR2(20)
  4  );

Table created.

SQL>

行内约束(与列在同一行):

SQL> CREATE TABLE warehouse(
  2  warehouse_id INTEGER NOT NULL PRIMARY KEY,
  3  warehouse_address VARCHAR2(20),
  4  warehouse_postcode VARCHAR2(8),
  5  warehouse_phonenm INTEGER,
  6  region_id INTEGER constraint fk_wr REFERENCES region(region_id));

Table created.

SQL>

大纲约束(在create table结尾):

SQL> CREATE TABLE warehouse(
  2  warehouse_id INTEGER NOT NULL PRIMARY KEY,
  3  warehouse_address VARCHAR2(20),
  4  warehouse_postcode VARCHAR2(8),
  5  warehouse_phonenm INTEGER,
  6  region_id INTEGER,
  7  --
  8  constraint fk_wr foreign key (region_id) references region (region_id));

Table created.

SQL>

使用alter table:

SQL> CREATE TABLE warehouse(
  2  warehouse_id INTEGER NOT NULL PRIMARY KEY,
  3  warehouse_address VARCHAR2(20),
  4  warehouse_postcode VARCHAR2(8),
  5  warehouse_phonenm INTEGER,
  6  region_id INTEGER);

Table created.

SQL> alter table warehouse add constraint fk_wr foreign key (region_id)
  2  references region (region_id);

Table altered.

SQL>