Oracle追加約束、刪除約束的方法與外鍵約束的使用


添加添加約束有兩種方法,一種是在創建表時添加約束,還有一種是創建表后添加約束

一、創建表時添加約束

  create table std (

  id number(3) primary key,

  name varchar2(10),

  address varchar2(20)

  );     或者

  creat table std (

  id number(3),

  name varchar2(10),

  address varchar2(20),

  contraint PK_id primary key

  );

二、創建表后添加約束

  對於唯一、主鍵、檢查、外鍵約束

  語法:alter table 表名 add contraint 約束名稱 約束類型 (列名);

  舉例:alter table std add contraint NN_name not null(name);

 

  對於非空約束

  語法:alter table 表名 motify 列名 constraint 約束名稱 not null;

 

  對於默認約束

  語法:alter table 表名 motify 列名 default '自定義的默認值'; 

 

刪除約束:

一、對於唯一、主鍵、檢查、外鍵、非空約束

  語法:alter table 表名 drop constraint 約束名;

 

二、對於默認約束

  語法:alter table 表名 motify 列名 default null; 

 

外鍵的使用:

一、通過外鍵,可以將兩張表關聯起來,A表中的a列--->B表中的b列,則a為外鍵,b為主鍵

二、語法:constraint FK_子表_外鍵列 foreign key(外鍵列) reference 父表(主鍵列);

 

create table sub(sid number, sname varchar(10) not null UNIQUE, constraint PK_sid primary key(sid));  --創建課程表 insert into sub values(1,'Java'); insert into sub values(2,'Python'); insert into sub values(3,'C#'); commit;  --插入課程表數據

create table student( stuno number(3),stuname varchar2(10), stuaddress varchar2(20),stuid number(3), constraint FK_student_sub foreign key(stuid) references sub(sid));  --創建學生表,同時創建外鍵 insert into student values(1,'張三','廣州市海珠區',1); insert into student values(2,'李四','廣州市天河區',3); insert into student values(3,'王五','廣州市越秀區',1);  --插入學生數據

 

三、注意

  1、主表中被引用的必須時主鍵或者唯一

  2、子表插入的數據在父表不存在時,會報錯,例如:insert into student values(4,'趙六','廣州市荔灣區',4)    --錯誤

  3、刪除主表數據時,若關聯的子表存在數據,則刪除失敗

 

四、外鍵使用建議:

  1、當父表中沒有對應數據時,不要向子表增加數據

  2、不要更改父表的數據,導致子表孤立

  3、建議:在創建外鍵時,直接設置成 級聯刪除 或者 級聯置空

  4、刪除表的操作是:先刪除子表,再刪除父表

 

五、擴展

  若父表關聯的子表存在數據,還是先直接刪除父表數據時,可以使用級聯刪除,或者級聯置空

  1、級聯刪除:刪除父表數據時,會同時刪除子表中關聯的數據

     使用方式:在創建好的外鍵約束后面加上 on delete cascade

    create table student(
    stuno number(3),stuname varchar2(10),
    stuaddress varchar2(20),stuid number(3),
    constraint FK_student_sub foreign key(stuid) references sub(sid) on delete cascade
    ); 

 

  2、級聯置空:刪除父表數據時,會將子表中關聯的外鍵值置空,其他字段不影響

     使用方式:在創建好的外鍵約束后面加上 on delete set null   

    create table student(
    stuno number(3),stuname varchar2(10),
    stuaddress varchar2(20),stuid number(3),
    constraint FK_student_sub foreign key(stuid) references sub(sid) on delete set null
    ); 

 

 

   


免責聲明!

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



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