图片 19

SQLServer之PRIMARY KEY约束

PRIMARY KEY约束添加规则

1、在表中常有一列或多列的组合,其值能唯一标识表中的每一行,这样的一列或多列成为表的主键(PrimaryKey)。

2、一个表只能有一个主键,而且主键约束中的列不能为空值。

3、只有主键列才能被作为其他表的外键所创建。

4、一般情况下一个表中只能有一个主键。

当表结构不存在时

如果表结构不存在,可以直接添加约束,可以同时添加一个或者多个约束。

语法:

–如果表结构不存在时添加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

使用SSMS数据库管理工具添加主键约束

CHECK约束添加规则

1、CHECK
约束用于限制列中的值的范围。

2、Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足Check约束的条件,否则将无法正确输入。

3、如果对单个列定义 CHECK
约束,那么该列只允许特定的值。

4、如果对一个表定义 CHECK
约束,那么此约束会在特定的列中对值进行限制。

使用SSMS数据库管理工具添加一列作为一个主键约束

1、连接数据库,选择数据表-》右键点击,选择设计。

图片 4

2、在新窗口中,选择一行,右键点击-》选择设置主键-》点击保存按钮(或者ctrl+s)。

图片 5

3、刷新表查看示例结果。

图片 6

 

CHECK约束优缺点

优点:

1、保证列数据规范和范围,可以约束数据完整性

2、有Check约束的列可以提供给查询优化器信息从而提升性能

缺点:

1、插入或者修改时数据不符合约束规则,无法修改成功。

使用T-SQL脚本添加主键约束

使用SSMS数据库管理工具添加CHECK约束

1、连接数据库,选择数据库,选择数据表-》右键点击(或者直接点击约束,右键点击,选择添加约束,后面步骤相同)-》选择设计。

图片 7

2、选择要添加约束的数据列-》右键点击-》选择CHECK约束。

图片 8

3、在CHECK约束弹出框中点击添加。

图片 9

4、在CHECK约束弹出框中-》输入CHECK约束表达式-》输入CHECK约束名-》输入CHECK约束描述-》其他可以选择默认。

图片 10

5、点击关闭-》点击保存按钮(或者ctrl+s)-》刷新表查看结果。

图片 11

使用SSMS数据库管理工具添加多列作为一个主键约束

1、连接数据库,选择数据表-》右键点击-》选择设计。

图片 12

2、在新窗口中-》按下ctrl键,选择多行-》右键点击-》选择设置主键-》点击保存(或者ctrl+s)。

图片 13

3、刷新表查看示例结果。

图片 14

使用T-SQL脚本添加CHECK约束

使用T-SQL脚本添加一列作为一个主键约束

当表中约束存在时,不可以直接添加主键约束,因为一张表只允许存在一个主键约束,如果需要添加主键约束需要先删除已存在的主键约束再添加主键约束。当表中不存在主键约束时,可直接添加主键约束。

语法:

if exists(select * from sysobjects where
name=约束名)
alter table 数据库名.[dbo].表名 drop
constraint 约束名;
alter table 数据库名.[dbo].表名 add
constraint 约束名 primary key(列名 [asc|desc]);

示例:

–如果约束存在则删除约束,如果约束不存在则不删除
if exists(select * from sysobjects where
name=’idcon2′)
alter table [testss].[dbo].[test1]
drop constraint idcon2;
–添加约束
alter table [testss].[dbo].[test1]
add constraint idcon2 primary key(id asc);

图片 15

图片 16

当表结构存在时

添加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

 图片 17

图片 18

使用T-SQL脚本添加多列作为一个主键约束

当表中约束存在时,不可以直接添加主键约束,因为一张表只允许存在一个主键约束,如果需要添加主键约束需要先删除已存在的主键约束再添加主键约束。当表中不存在主键约束时,可直接添加主键约束。

语法:

–添加多列主键约束

if exists(select * from sysobjects where
name=约束名)
alter table 数据库名.[dbo].表名 drop
constraint 约束名;
alter table 数据库名.[dbo].表名 add
constraint 约束名 primary
key(列名 [asc|desc],列名 [asc|desc],……);

示例:

–添加多列主键约束
if exists(select * from sysobjects where
name=’idcon2′)
alter table [testss].[dbo].[test1]
drop constraint idcon2;
–添加约束
alter table [testss].[dbo].[test1]
add constraint idcon2 primary key(id asc,name desc);

图片 19

PRIMARY KEY约束优缺点

优点:

1、简单、效率高。 

2、保证数据完整性。

3、不会有空值。

4、不允许存在重复值。

缺点:

1、主键自增一般使用int型,有数据条数的限制。

2、在数据库进行数据合并时会比较麻烦。