oracle約束&修改


一、約束
 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 '注釋內容';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM