Oracle SQL 创建 Table 问题

Oracle SQL Create Table Issue

当我尝试用一​​些测试行创建测试 table 时,SQL Plus 给我以下错误:

    SQL> CREATE TABLE test_table
  2  (
  3  test_data0 NUMBER(3) CONSTRAINT test_data0_pk PRIMARY KEY,
  4  test_data1 NUMBER(3) CONSTRAINT test_data1_fk REFERENCES test_table2, CONSTRAINT test_data1_condition NOT NULL,
  5  test_data2 DATE CONSTRAINT test_data2_condition NOT NULL,
  6  test_data3 NUMBER(2),
  7  test_data4 NUMBER(2) DEFAULT 0
  8  );
test_data1      NUMBER(3) CONSTRAINT test_data1_fk REFERENCES test_table2, C
ONSTRAINT test_data1_condition NOT NULL,

                               *
ERROR at line 4:
ORA-00904: : invalid identifier

如果我只在第 4 行设置两个约束之一,我不会收到任何错误。有什么问题?

内联约束不需要 constraint 关键字。当然,你可以使用它。但是,特别是 not null 通常是在没有约束的情况下表达的。所以:

CREATE TABLE test_table (
  test_data0 NUMBER(3) CONSTRAINT test_data0_pk PRIMARY KEY,
  test_data1 NUMBER(3) NOT NULL CONSTRAINT test_data1_fk REFERENCES test_table2,
  test_data2 DATE NOT NULL,
  test_data3 NUMBER(2),
  test_data4 NUMBER(2) DEFAULT 0
);

如果您 多次使用 constraint,则需要省略逗号。那就是你得到的错误。所以该行将是:

test_data1 NUMBER(3) CONSTRAINT test_data1_fk REFERENCES test_table2
                     CONSTRAINT test_data1_condition NOT NULL,

我经常为内联约束省略 constraint 本身:

CREATE TABLE test_table (
  test_data0 NUMBER(3) PRIMARY KEY,
  test_data1 NUMBER(3) NOT NULL REFERENCES test_table2,
  test_data2 DATE NOT NULL,
  test_data3 NUMBER(2),
  test_data4 NUMBER(2) DEFAULT 0
);

诚然,如果违反约束,您将丢失约束的名称。