Oracle SQL创建表问题

时间:2016-03-08 22:22:46

标签: sql oracle ddl create-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行放置两个约束中的一个,我就不会收到任何错误。有什么问题?

1 个答案:

答案 0 :(得分:1)

对于内联约束,您不需要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
);

不可否认,违反时会丢失约束的名称。