>

SQLServer之DEFAULT约束

- 编辑:乐百家599手机首页 -

SQLServer之DEFAULT约束

当表结构不真实时

借使表结构不设有,能够一直抬高约束,能够同期加多三个要么多少个约束。

语法:

--假设表结构不设一时增加check约束
use 数据库名;
go
--要是已存在表则删除
if exists(select * from sysobjects where name=表名 and xtype='U')
drop table 表名;
go
--创建表
create table 表名
(
--字段证明
列名 int identity(1,1) not null,
列名 nvarchar(50) null,
列名 nvarchar(50) null constraint 约束名 check(约束法规),
列名 nvarchar(50) null,
列名 int,
列名 int constraint 约束名 check(约束法规)
primary key clustered(列名 asc) with(ignore_dup_key=off) on [primary], --主键索引注脚
)on [primary]

--字段注释注明
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

go

示例:

--固然表结构不设一时增加check约束
use testss;
go
--如若已存在表则删除
if exists(select * from sysobjects where name='test1' and xtype='U')
drop table test1;
go
--创建表
create table test1
(
--字段注解
id int identity(1,1) not null,
name nvarchar(50) null,
sex nvarchar(50) null constraint check1 check(sex='男' or sex='女'),
age nvarchar(50) null,
classid int,
height int constraint check2 check(height>=110 and height<=120)
primary key clustered(id asc) with(ignore_dup_key=off) on [primary], --主键索引申明
)on [primary]

--字段注释注脚
exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'id主键' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'id';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'name';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'sex';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年龄' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'age';

exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'班级id' , @level0type=N'SCHEMA',
@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'classid';

go

 图片 1

图片 2

图片 3

DEFAULT约束优瑕疵

优点:

1、使用暗中认可值能够减掉代码量,新增加多少时得以不用写新添私下认可值列,实践新扩展操作时时暗许填充。

2、较有助于开始展览总计和分析,以及福利程序逻辑操作。

缺点:

1、使用不为NULL的暗许值,占用了越多的寄放空间。

 

利用T-SQL脚本加多外键约束

alter table Acc_WayBill
add PackingWay int
go
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'包装格局(0纸箱、1木箱、2别样)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Acc_WayBill', @level2type=N'COLUMN',@level2name=N'PackingWay'
GO

当表结构存在时

增添CHECK约束时首先校验约束是还是不是已存在,假如存在应该是先删除再增多,假若子虚乌有则直接助长。

语法:

-- 增多三个暗中认可约束
use 数据库名;
go

if exists(select * from sysobjects where name=约束名)
alter table 表名 drop constraint 约束名;
go

alter table 表名 add constraint 约束名 check(约束准绳),constraint 约束名 check(约束法则);
go

示例:

-- 增加一个暗中同意约束
use testss;
go

if exists(select * from sysobjects where name='check1')
alter table test1 drop constraint check1;
go

alter table test1 add constraint check1 check(height>=170 and height<=175);
go

 图片 4

图片 5

当表结构已存在时

首先决断表中是不是留存暗中认可约束,假若存在则先删除私下认可约束再增加,假如空头支票则一向抬高。

语法:

use 数据库
go
--推断暗许约束是或不是存在,若是存在则先删除,若是不设有则一向抬高
if exists(select * from sysobjects where name=约束名)
alter table 表名 drop constraint 约束名;
go
--给钦命列加多私下认可约束
alter table 表名 add constraint 约束名 default(约束值) for 列名;
go

示例:

use [testss]
go
--判定暗许约束是或不是留存,要是存在则先删除,假使空中楼阁则直接助长
if exists(select * from sysobjects where name='defalut_height')
alter table [testss].[dbo].[test1] drop constraint defalut_height;
go
--给钦点列加多暗中认可约束
alter table [testss].[dbo].[test1] add constraint defalut_height default(160) for height;
go

图片 6

图片 7

FOREIGN KEY约束优劣点

优点:

1、保险数据的一致性,完整性,更保证。

2、关联查询时,能够用到FK 的总计新闻。

3、有主外键的数据库设计能够追加EHighlander图的可读性。

缺点:

1、删队或更新关联数据时必要做检查,作用会非常的低。

2、手工业调数据时,会存在主从表校验,会相比麻烦。

3、批量导入数据时,会存在外键校验,须要先关闭外键约束,导入达成再张开外键约束,操作相比麻烦。

 

 

本文由乐百家数据库发布,转载请注明来源:SQLServer之DEFAULT约束