我正在实现一个由3个其他值组成的复合主键。我创建了表,并在所有其他字段中插入数据。我是否正确地假设我不需要为复合pk提供值,因为它使用其他值来创建自己?这是我的CREATE和INSERT脚本来帮助...
CREATE TABLE representation
(
representation_id NUMBER (4),
reference_id NUMBER (4),
case_id NUMBER (4),
barrister_id NUMBER (2),
CONSTRAINT representation_case_id_fk FOREIGN KEY
(case_id)
REFERENCES CASE (case_id),
CONSTRAINT representation_barrister_id_fk FOREIGN KEY
(barrister_id)
REFERENCES barrister (barrister_id),
CONSTRAINT representation_pk PRIMARY KEY
(reference_id, case_id, barrister_id)
);
INSERT INTO representation (reference_id, case_id, barrister_id)
VALUES (sq_representation_reference.NEXTVAL, '0', '5');
答案 0 :(得分:0)
此处没有指示Oracle为 representation_id 提供值。虽然该字段的名称非常具有暗示作为唯一标识符,但实际上没有任何内容可以实现,也没有给它一个值。
您必须自己插入一个值。您可以通过多种方式完成此操作,例如:
INSERT
声明中包含名称和值,或ON INSERT
触发器,您可以通过基于其他三个的公式定义该字段的值,或者从序列中获取该字段。答案 1 :(得分:0)
您的复合主键包含三列:
CONSTRAINT representation_pk PRIMARY KEY
(reference_id, case_id, barrister_id)
您的插入语句成功,因为这些是您填充的三列:
INSERT INTO representation (reference_id, case_id, barrister_id)
REFERENCE_ID没有任何反应,因为它是一个可选列:
SQL> desc representation
Name Null? Type
----------------------------------------- -------- ----------------------------
REPRESENTATION_ID NUMBER(4)
REFERENCE_ID NOT NULL NUMBER(4)
CASE_ID NOT NULL NUMBER(4)
BARRISTER_ID NOT NULL NUMBER(2)
SQL>
(即使您没有明确指定NOT NULL约束,Oracle也会强制使用主列。)