我在一个地方看到 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.主键字段)