REFERENTIAL 約束如何使用?

我在一個地方看到 REFERENTIAL的說明:
(通常使用外鍵) 基於其他表中的列的值,指定可接受的用於更新的數據值? 請問具體如何使用,能否舉個例子說明?

 

 

約束:

以外鍵約束爲例說明一下:
1、創建測試環境:
if exists (select 1
           
from  sysobjects
          
where  id = object_id('dbo.tab1')
           
and   type = 'U')
  
drop table dbo.tab1
go

/*==============================================================*/
/* Table: tab1                                                  */
/*==============================================================*/
create table dbo.tab1 (
   personid            
char(2)              not null,
   personname          
varchar(10)          null,
   depid               
char(4)              null,
  
constraint PK_TAB1 primary key (personid)
)
go

alter table dbo.tab1
  
add constraint FK_TAB1_REFERENCE_TAB2 foreign key (depid)
     
references dbo.tab2 (depid)
go

alter table dbo.tab1
  
drop constraint FK_TAB1_REFERENCE_TAB2
go

if exists (select 1
           
from  sysobjects
          
where  id = object_id('dbo.tab2')
           
and   type = 'U')
  
drop table dbo.tab2
go

/*==============================================================*/
/* Table: tab2                                                  */
/*==============================================================*/
create table dbo.tab2 (
   depid               
char(4)              not null,
   depname             
varchar(10)          null,
  
constraint PK_TAB2 primary key (depid)
)
go

alter table dbo.tab1
  
add constraint FK_TAB1_REFERENCE_TAB2 foreign key (depid)
     
references dbo.tab2 (depid)
go
2、插入測試數據:
insert tab2
select '0001','綜合辦公室' union all
select '0002','採購部'

insert tab1
select '01','張三','0001' union all
select '02','李四','0002' union all
select '03','王五','0001' union all
select '04','薛六','0002'
3、以添加數據、刪除數據、刪除表三個例子說明一下約束的作用:
(
1)、添加數據時,如果在部門表裏面沒有的部門編號,在人員信息表不允許錄入,測試如下:

insert tab1
select '05','張三','0003'

錯誤提示:
消息
547,級別 16,狀態 0,第 1
INSERT 語句與 FOREIGN KEY 約束"FK_TAB1_REFERENCE_TAB2"衝突。該衝突發生於數據庫"DB_ACSERP",表"dbo.tab2", column 'depid'
語句已終止。
(
2)在刪除部門表中的數據時,如果要刪除的數據存在於人員信息表中,不允許刪除:
delete from tab2 where depid='0001'
錯誤提示:
消息
547,級別 16,狀態 0,第 1
DELETE 語句與 REFERENCE 約束"FK_TAB1_REFERENCE_TAB2"衝突。該衝突發生於數據庫"DB_ACSERP",表"dbo.tab1", column 'depid'
語句已終止。

(
3)刪除表:
drop table tab2
錯誤提示:
消息
3726,級別 16,狀態 1,第 1
無法刪除對象
'tab2',因爲該對象正由一個 FOREIGN KEY 約束引用。

4、刪除測試環境:
drop table tab1
drop table tab2

完成。
通過以上內容,你應該可以理解了外鍵約束的使用方法了。

 

 

我想樓主應該問的是級聯更新與級聯刪除的意思吧。要實現級聯更新與級聯刪除就是使用on update 與on delate選項。
方法:
constraint fk_a  foreign key  (a) refrences table1.a  on 【delete/update】 cascade

 

 

FOREIGN KEY 約束用於引用其它表。FOREIGN KEY 可以是單列鍵或多列鍵。下例顯示 employee 表上引用 jobs 表的單列 FOREIGN KEY 約束。對於單列 FOREIGN KEY 約束,只需要 REFERENCES 子句。

job_id  smallint      NOT NULL
      DEFAULT 1
      REFERENCES jobs(job_id)

也可以顯式使用 FOREIGN KEY 子句並複述列特性。注意在這兩個表中列名不必相同。

FOREIGN KEY (job_id) REFERENCES jobs(job_id)

多列鍵約束作爲表約束創建。在 pubs 數據庫中,sales 表包含多列 PRIMARY KEY。下例顯示如何從其它表中引用此鍵(可選擇顯式約束名)。

CONSTRAINT FK_sales_backorder FOREIGN KEY (stor_id, ord_num, title_id)
  REFERENCES sales (stor_id, ord_num, title_id)

加上是否級聯更新:
[ ON DELETE { CASCADE ¦ NO ACTION } ]
            [ ON UPDATE { CASCADE ¦ NO ACTION } ]

可以在相互間具有引用關係的表上組合使用 CASCADE 和 NO ACTION。如果 SQL Server 遇到 NO ACTION,將終止執行語句並回滾相關的 CASCADE 操作。當 DELETE 語句導致 CASCADE 和 NO ACTION 組合操作時,在 SQL Server 檢查 NO ACTION 操作之前將執行所有 CASCADE 操作。
-----------------------

SQL code
create table T(ID int unique) create table T2(t_id int references t(ID) on delete cascade on update cascade) insert T select 1 insert T2 select 1 insert T2 select 1 ------- update T set ID=2 select * from T2 --- delete T select * from T2
SQL code 
ALTER 表1 ADD Constraint FK_表1_表2 FOREIGN KEY(表1.外鍵字段) REFERENCE 表2(表2.主鍵字段)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章