SQL语言之定义约束
定義約束
一、數(shù)據(jù)庫中的約束類型
?非空約束(not null)
?唯一性約束(unique)
?主鍵約束(primary key)
?外鍵約束(foreign key)
?用戶自定義約束(check)
?定義約束的原則
1.在創(chuàng)建表的同時,或者在創(chuàng)建表之后都可以定義約束。
2.可以給約束其名字,但約束名不能相同,必須是唯一的。如果沒有為約束起名 字,Oracle服務(wù)器將用默認格式SYS_Cn產(chǎn)生一個名字,這里的n是一個唯一 的整數(shù),所以約束名是唯一的;
二、定義not null約束
?創(chuàng)建表時定義not null約束;
例
創(chuàng)建表dept80,包括ID,名字,薪水,姓名與薪水列不可以為空,并給薪水的非 空約束自定義一個名字; Create table dept80(id number,name varchar2(10) not null,salary number constraint dept80_dsn not null );?修改表定義not null約束
(以hr用戶中的dept80表為例)
例
三、定義unique約束
?創(chuàng)建表時定義unique
例
創(chuàng)建表dept90,包括ID,名字,將ID定義唯一約束,并自定義名字; Create table dept90(id number constraint dept90_iduk unique,name varchar2(20));?修改表定義unique約束;
(以hr用戶中的dept90表為例)
例
將dept90表中的名字列修改為唯一約束;Alter table dept90 modify(name unique);四、定義primary key約束
?創(chuàng)建表時定義primary key約束
例
創(chuàng)建dept70表,包括ID,并為ID定義主鍵約束,以及定義約束名字;Create table dept70(id number constraint dept70_id_pk primary key);?修改表定義primary key約束
例
創(chuàng)建dept60表,包含ID;Create table dept60(id number);將dept60表中的ID列修改為主鍵約束,并為其自定義名字; Alter table dept60 modify(id constraint dept60_id_pk primary key);**創(chuàng)建聯(lián)合主鍵** 創(chuàng)建dept50表,包括ID,名字,將為ID與名字列都定義主鍵約束,并為其自定義 名字; Create table dept50(id number , name varchar2(20) , constraint dept50_pk primary key(id,name));五、定義foreign key約束(特殊,不支持在后面直接添加定義約束)
?創(chuàng)建表時定義foreign key
例
創(chuàng)建dept40表,包括ID、d_id,為d_id列定義外鍵約束并自定義名字(參照dept60 表中的ID列);Create table dept40(id number , d_id number , constraint dept40_fk foreign key(d_id) references dept60(id) );?修改表定義foreign key
例 向dept50表中添加d_id列;Alter table dept50 add(d_id number); 將dept50中的d_id列定義外鍵約束(參照dept60表中的ID列),并自定義名字; Alter table dept50 add constraint dept50_fk foreign key(d_id) references dept60(id);六、定義check約束
?創(chuàng)建表時定義check約束
例
創(chuàng)建dept30表,包括ID、薪水,薪水不能小于1000,并自定義名字;Create table dept30(id number , salary number(8,2) , constraint dept30_ck check(salary > 1000));?修改表定義check約束
例
向dept50表中添加薪水列;Alter table dept50 add(salary number(8,2)); 修改dept50表中的薪水不能小于1000,并自定義名字;Alter table dept50 add constraint dept50_ck check(salary > 1000);七、 禁用與啟用約束
?查看約束
(以hr用戶中的dept50表為例)
例
查看dept50表下的所有約束類型,約束名字; Select constraint_name,constraint_type,search_condition from user_constraints where lower(table_name) = ‘dept50’;?禁用約束
(以hr用戶中的dept50表為例)
例
禁用dept50下的自定義約束;Alter table dept50 disable constraint dept50_ck;級聯(lián)禁用禁用dept60表中的主鍵約束;Alter table dept60 disable constraint dept60_id_pk cascade;?啟用約束
(以hr用戶中的dept50表為例)
例
啟用dept50下的自定義約束;Alter table dept50 enable constraint dept50_ck;總結(jié)
以上是生活随笔為你收集整理的SQL语言之定义约束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL语言之数据定义语言(Oracle)
- 下一篇: SQL语言之创建数据库其他对象(视图)