02主键

主键是表中列的唯一标识表中的行的一列或多列的组合。


以下是设置列成为主键的规则:
主键列不能包含NULL值或空字符串。
主键值在整个表中必须是唯一的。
主键值不应随时间而改变。

1.内联约束:

CREATE TABLE purchase_orders (

po_nr NUMBER PRIMARY KEY,
    vendor_id NUMBER NOT NULL,
    po_status NUMBER(1,0) NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL
);

2.表约束:
CREATE TABLE purchase_orders (
    po_nr NUMBER,
    vendor_id NUMBER NOT NULL,
    po_status NUMBER(1,0) NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE NOT NULL,
    CONSTRAINT pk_purchase_orders PRIMARY KEY(po_nr)---上面语句中明确地给PRIMARY KEY主键约束分配了一个名称:pk_purchase_orders。
);
 
 
3、列级主键约束与表级主键约束的区别 :
在列定义同时定义的约束称为列级完整性约束定义,作为表的独立的一项定义的完整性约束称为表级完整性约束。在列级完整性约束定义处可以定义如下约束:
一、NOT NULL:限制列取非空值
二、DEFAULT:指定列的默认值,使用形式为:DEFAULT 常量
三、UNIQUE:限制列取值不重
四、CHECK:限制列的取值范围,使用形式为:CHECK(约束表达式)
五、PRIMARY KEY:指定本列为主码
六、FOREIGN KEY:定义本列为引用其他表的外码。使用形式为:
【FOREIGN KEY(<列名>)】REFERENCES<外表名>(<外表列名>)
在上述约束中,除了NOT NULL和DEFAULT不能在表级完整性约束处定义之外,其他约束均可在表级完整性约束处定义。但有几点需要主义:第一,如果CHECK约束是定义多列之间的取值约束,则只能在表级完整性约束处定义;第二,如果表的主码由多个列(超过1列)组成,则这样的主码也只能在表级完整性约束处定义,并注意将主码列用括号括起来,即PRIMARY KEY(列1{【,列2】...});第三,如果在表级完整性约束处定义外码,则FOREIGN KEY 和<列名>均不能省略。
 

4.将主键添加到表中

有时,您可能需要将主键约束添加到一个存在的表。要做到这一点,只需要使用ALTER TABLE语句,如下所示:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name 
PRIMARY KEY (column1, column2, ...);
​

5.删除Oracle PRIMARY KEY约束 一般很少会从表中删除PRIMARY KEY约束。 如果必须要删除主键,则使用以下ALTER TABLE语句。

ALTER TABLE table_name DROP CONSTRAINT primary_key_constraint_name;

猜你喜欢

转载自blog.csdn.net/weixin_41556724/article/details/86009045