一、約束
Oracle數據庫通過約束(constraints)防止無效的數據進入到表中,以保護數據的實體完整性。
為了便於約束的使用,往往需要為約束起一個有意義的名字(例如student_id_pk表示student表id列為主鍵);
如果不顯式命名約束,Oracle數據庫將以SYS_Cn的格式為約束命名,這里n是唯一的整數。
約束分為字段級別約束和表級別約束:字段級約束:只為單個字段添加約束;表級約束:為多個字段添加約束
①、not null:指定字段不能為空,只能定義為字段級約束
create table book(
author varchar2(60) not null
)
②、unique:指定字段的值(或字段組合的值)對於表中所有的行必須是唯一的。
對於無非空約束的字段,唯一鍵約束允許輸入空值,且包含空值的行可以有多個。可以為字段級別約束,也可以為表級別約束。
create table user_info(
user_name varchar2(30) unique
)
③、primary key:指定主鍵。該約束強制字段或字段組合必須具有唯一性且每個字段不能為空。可以為字段級別約束,也可以為表級別約束。
create table book(
id char(36) primary key
)
④、foreign key:指定外鍵(即外來的主鍵)。外鍵值必須匹配父表中存在的值;如果父表主鍵值是子表的外鍵值,則該數據不能刪除,Oracle數據庫中外鍵的值可以為null。
在創建表的最后添加語句:
foreign key(字段名) refenreces (主表名)字段名;
⑤、check:指定列值必須滿足check中條件,否則無法進行添加或修改
create table people(
age number(3) not null check(age>0 and age<150)-- --年齡不能為空並且范圍在0~150
)
二、修改表
1、修改表字段:
a、添加字段
alter table student
add (sex char(2) default '1' constraint student_sex_1_or_2 check(sex='1' or sex='2'))
注意:新添加的字段在表的最后一列,不能指定字段的位置,這與MySQL數據庫不同(MySQL數據庫可以通過after設定添加字段的先后順序)
b、修改字段
alter table student
modify(name varchar2(12))
注意:字段的修改包括修改數據類型(只有對應列為空指才可以修改)、大小和默認值,其中默認值的修改只會影響后來插入表的數據,對之前的數據不會產生影響。
c、刪除字段
alter table student
drop(sex)
注意:
①、一次只能刪除一個字段;
②、一個表至少要保留一個字段;
③、如果所刪除列(如publisher表中id列)是另一個表的外鍵(book表publisher_id)則該列(publisher表中id列)無法刪除,如下圖所示:
2、修改表字段約束:
a、添加約束
alter table student
add constraint student_id_pk primary key(id);--將student表id列設為主鍵
b、刪除約束
alter table student
drop constraint student_sex_1_or_2;--依據約束名刪除約束
alter table student
drop primary key--依據約束類型刪除約束
alter table student
drop unique(id) --依據約束類型刪除約束
c、啟用或禁用約束
alter table student
disable constraint student_sex_1_or_2;--禁用約束
alter table student
enable constraint student_sex_1_or_2;--啟用約束
三、表重命名
rename 舊名字 to 新名字
四、截斷表
truncate table 表名——不用執行commit就可以將表數據刪除
delete from 表名——必須執行commit才可以將表數據刪除
關於二者的詳細區別可以參考:
鏈接:
五、刪除表
drop table 表名
六、注釋
表注釋
comment on table 表名 is '注釋內容';
字段注釋
comment on column 表名.字段名 is '注釋內容';