首页 > 开发 > 综合 > 正文

命名约束 vs 系统生成的约束

2024-07-21 02:12:45
字体:
来源:转载
供稿:网友

当你为一个表定义约束时,给约束命名是一个好习惯。另外,sql server会为约束创建系统自动生成的名称。当在没有给约束命名的情况下,生成数据定义语言(ddl)(当ddl应用在几个数据库上时),那么系统生产约束名一般是不一样的。

 
在为数据库生成计划后,再生成详细的约束列表,与一个详细计划构造的合法约束列表进行对比,是一个很好的习惯。当数据库相当大时,这样做是非常有益的。

下面的脚本演示了命名约束、不命名约束及系统自动生成的约束名之间的区别,三者使用了同样的表,只不过每次都是重新创建的:

create table parent
(pkey1 int not null
       constraint pk_parent primary key (pkey1))
go


create table constraintname
(pkey int not null
 constraint pk_cnstnm primary key,
 parent_pkey1 int not null,
col1  int null
 constraint ck_cnstnm_col1 check  (col1 in ( 'a','b' ) )
 constraint df_cnstnm_col1 default 1,
constraint fk_parent_cnstnm foreign key (parent_pkey1)
       references parent (pkey1)
)
go
exec sp_helpconstraint constraintname
go
drop table constraintname
go
create table constraintname
(pkey int not null
       primary key,
 parent_pkey1 int not null
       foreign key (parent_pkey1) references parent(pkey1),
 col1  int null
       check  (col1 in ( 'a','b' ) )
       default 1
)
go
exec sp_helpconstraint constraintname
go
drop table constraintname
go
create table constraintname
(pkey int not null
       primary key,
 parent_pkey1 int not null
       foreign key (parent_pkey1) references parent(pkey1),
 col1  int null
       check  (col1 in ( 'a','b' ) )
       default 1
)
go
exec sp_helpconstraint constraintname
go
drop table constraintname
go
drop table parent
go

注册会员,创建你的web开发资料库,
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表