REFERENTIAL 约束如何使用?

yuanzhang 2008-05-08 09:29:05
我在一个地方看到 REFERENTIAL的说明:
(通常使用外键) 基于其他表中的列的值,指定可接受的用于更新的数据值? 请问具体如何使用,能否举个例子说明?
...全文
245 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2008-05-10
  • 打赏
  • 举报
回复
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 操作。
-----------------------

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
  • 打赏
  • 举报
回复
我想楼主应该问的是级联更新与级联删除的意思吧。要实现级联更新与级联删除就是使用on update 与on delate选项。
方法:
constraint fk_a foreign key (a) refrences table1.a on 【delete/update】 cascade
  • 打赏
  • 举报
回复
约束:

以外键约束为例说明一下:
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

完成。
通过以上内容,你应该可以理解了外键约束的使用方法了。


zhiguo2008 2008-05-10
  • 打赏
  • 举报
回复
ALTER 表1 ADD Constraint FK_表1_表2 FOREIGN KEY(表1.外键字段) REFERENCES 表2(表2.主键字段)
zhiguo2008 2008-05-10
  • 打赏
  • 举报
回复

ALTER 表1 ADD Constraint FK_表1_表2 FOREIGN KEY(表1.外键字段) REFERENCE 表2(表2.主键字段)
关于商标法和言论自由的讨论通常侧重于法院援引言论自由的基本保证作为外部较高等级的规范,以防止商标保护侵犯政治,艺术或商业言论自由的情况。 相比之下,目前对辩论的贡献集中于确保商标体系内有足够的言论自由空间的不同方式:-一方面,商标法认识到有必要使某些标志不受保护。 由于完全不受保护,标志可能会超出商标体系。 由于缺乏鲜明的性格,他们也可能保持自由; -另一方面,商标法可以限制专有权的范围。 商标所有者的权利可能会受到在交易过程中以及作为商标使用时的严格使用要求的限制。 由于在确定混淆或稀释的可能性时要进行严格的测试,因此它们也可能会受到限制。 此外,通过采用例外,某些使用形式可以免除商标所有者的控制。 这些不同的策略可以看作是辅助工具:认识到必须保持标志自由,这首先阻止了贸易商获得商标权。 一旦获得商标保护,对保护范围的限制就可以确保标志的可用性。 这些补充工具的应用导致了一个公共领域,该领域包括不受商标权约束的不受保护的标志和受保护的标志,这些标志在某些方面仍然可以自由使用。 因此,商标法支持的公共领域提供了不受保护和受保护的标志,可用于政治,艺术和商业演讲。 在下面的分析中,将讨论欧盟立法和法院判决,这些判决认识到有必要使标志不受商标保护(第2节)并限制专有权的范围(第3节)。 分析引起了这样一个问题:欧盟商标法是否为协调商标保护与表达自由提供了令人满意的框架(第4节)。 得出结论,将考虑对欧盟商标法的潜在修改,包括欧盟委员会最近提出的建议(第5节)。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧