32. Which CREATE TABLE statement is valid?
A. CREATE TABLE ord_details
(ord_no NUMBER(2) PRIMARY KEY,
item_no NUMBER(3) PRIMARY KEY,
ord_date DATE NOT NULL);
B. CREATE TABLE ord_details
(ord_no NUMBER(2) UNIQUE, NOT NULL,
item_no NUMBER(3),
ord_date DATE DEFAULT SYSDATE NOT NULL);
C. CREATE TABLE ord_details
(ord_no NUMBER(2) ,
item_no NUMBER(3),
ord_date DATE DEFAULT NOT NULL,
CONSTRAINT ord_uq UNIQUE (ord_no),
CONSTRAINT ord_pk PRIMARY KEY (ord_no));
D. CREATE TABLE ord_details
(ord_no NUMBER(2),
item_no NUMBER(3),
ord_date DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT ord_pk PRIMARY KEY (ord_no, item_no));
A. CREATE TABLE ord_details
(ord_no NUMBER(2) PRIMARY KEY,
item_no NUMBER(3) PRIMARY KEY,
ord_date DATE NOT NULL);
B. CREATE TABLE ord_details
(ord_no NUMBER(2) UNIQUE, NOT NULL,
item_no NUMBER(3),
ord_date DATE DEFAULT SYSDATE NOT NULL);
C. CREATE TABLE ord_details
(ord_no NUMBER(2) ,
item_no NUMBER(3),
ord_date DATE DEFAULT NOT NULL,
CONSTRAINT ord_uq UNIQUE (ord_no),
CONSTRAINT ord_pk PRIMARY KEY (ord_no));
D. CREATE TABLE ord_details
(ord_no NUMBER(2),
item_no NUMBER(3),
ord_date DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT ord_pk PRIMARY KEY (ord_no, item_no));
答案:D
解析:
--A选项错误,一个表不能有两个主键
SQL> CREATE TABLE ord_details
2 (ord_no NUMBER(2) PRIMARY KEY,
3 item_no NUMBER(3) PRIMARY KEY,
4 ord_date DATE NOT NULL);
item_no NUMBER(3) PRIMARY KEY,
*
ERROR at line 3:
ORA-02260: table can have only one primary key
--B选项错误,UNIQUE和NOT NULL之间应该没有逗号。
SQL> CREATE TABLE ord_details
2 (ord_no NUMBER(2) UNIQUE, NOT NULL,
3 item_no NUMBER(3),
4 ord_date DATE DEFAULT SYSDATE NOT NULL);
(ord_no NUMBER(2) UNIQUE, NOT NULL,
*
ERROR at line 2:
ORA-00904: : invalid identifier
--C选项错误,有两处,一个是在ord_date DATE DEFAULT NOT NULL未指定默认值,一个是创建主键约束的时候会创建一个唯一约束和一个主键约束,因此再次建立唯一约束会导致错误
SQL> CREATE TABLE ord_details
2 (ord_no NUMBER(2) ,
3 item_no NUMBER(3),
4 ord_date DATE DEFAULT NOT NULL,
5 CONSTRAINT ord_uq UNIQUE (ord_no),
6 CONSTRAINT ord_pk PRIMARY KEY (ord_no));
ord_date DATE DEFAULT NOT NULL,
*
ERROR at line 4:
ORA-00936: missing expression
SQL> CREATE TABLE ord_details
2 (ord_no NUMBER(2) ,
3 item_no NUMBER(3),
4 ord_date DATE DEFAULT to_date(20140101,'yyyymmdd') NOT NULL,
5 CONSTRAINT ord_uq UNIQUE (ord_no),
6 CONSTRAINT ord_pk2 PRIMARY KEY (ord_no));
CONSTRAINT ord_uq UNIQUE (ord_no),
*
ERROR at line 5:
ORA-02261: such unique or primary key already exists in the table
--D选项正确,顺利执行
SQL> CREATE TABLE ord_details
2 (ord_no NUMBER(2),
3 item_no NUMBER(3),
4 ord_date DATE DEFAULT SYSDATE NOT NULL,
5 CONSTRAINT ord_pk1 PRIMARY KEY (ord_no, item_no));
Table created.