SQLServer之PRIMARY KEY约束

发布时间:2018-11-15  栏目:SQL  评论:0 Comments

FOREIGN KEY约束添加规则

1、外键约束并不仅可以跟另外一样发明底主键约束相链接,它还可定义也援另一个表中
UNIQUE 约束之排列。

2、如果在 FOREIGN
KEY 约束的排着输入非 NULL
值,则此值必须于为引用列中有;否则,将回来违反外键约束之错误信息。 若要包征了成外键约束的兼具值,请对拥有与列指定
NOT NULL。

3、FOREIGN KEY
约束只能引用位于同服务器上的同一数据库中之说明。 跨数据库的援完整性必须经触发器实现。

4、FOREIGN KEY
约束而援引同一表中之其它列。 此行为称为自援。

5、在列级指定的
FOREIGN KEY 约束只能排有一个引用列。 此列的数据类型必须与定义约束之排的数据类型相同。

6、在表级指定的
FOREIGN KEY 约束所拥有的援列数目必须跟约束列列表中的列数相同。 每个援列的数据类型也不能不同列表中相应列的数据类型相同。

7、对于表可包含的援其他表底 FOREIGN KEY
约束的多寡或外表所拥有的援特定表的 FOREIGN KEY 约束之数量, 数据库引擎 都未曾预定义的限定。 尽管如此,可应用的 FOREIGN KEY
约束的实际数据或让硬件配备和数据库及应用程序设计之界定。 表最多得以 253
只其他表及排作外键引用(传出引用)。 SQL
Server 2016 (13.x) 将可每当单身的表中引用的其余表和排(传入引用)的数限制于
253 提高至 10,000。 (兼容性级别至少得也
130。)数量限制的增强带来了下列约束:

DELETE 和 UPDATE
DML 操作支持胜出 253 独外键引用。 不支持
MERGE 操作。

对自进行外键引用的表仍只能进展 253
独外键引用。

列存储索引、内存优化表和 Stretch Database
暂不支持开展过 253 只外键引用。

8、对于临时表不强制 FOREIGN KEY 约束。

9、如果在 CLR
用户定义类型的列上定义外键,则该品种的落实必须支持二进制排序。

10、仅当 FOREIGN
KEY
约束引用的主键也定义为品种 varchar(max) 时,才会以这约束中动用项目为varchar(max) 的排。

PRIMARY KEY约束添加规则

1、在说明中不时发出同排或多排的构成,其值能唯一标识表中之每一样执行,这样的相同排或多排成表底主键(PrimaryKey)。

2、一个发明只能有一个主键,而且主键约束中的排列不可知啊空值。

3、只有主键列才会被当作任何表底外键所创办。

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

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

本示例演示当表结构都是时添加外键约束,创建表时加上外键约束步骤和说明结构是时添加外键步骤一样。示例演示如下:

1、连接数据库,打开要补偿加外键的数码表-》右键点击-》选择设计。

图片 1

2、在表明设计窗口-》选择而增补加外键的多寡行-》右键点击-》选择事关。

图片 2

3、在外键关系窗口中-》点击添加。

图片 3

4、添加了后-》首先修改表和排规范。

图片 4

5、在表和列窗口中-》输入外键名-》在左边选择主表和关系的列-》在右手选择从表和作外键的列-》点击确定。

图片 5

6、在外键关系窗口中-》可卜丰富或无加加外键描述-》可挑选丰富或未弥加修改要去除数据时级联操作-》可选丰富或无加加强制外键约束-》可卜丰富或未弥加强制用于复制-》点击关闭。

图片 6

7、点击保存按钮(ctrl+s)-》此时表会弹出警告窗口,点击是-》刷新查看外键是否丰富成功。

图片 7

图片 8

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

运用T-SQL脚论上加外键约束

动用SSMS数据库管理工具添加相同列作一个主键约束

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

图片 9

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

图片 10

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

图片 11

 

当表结构已经存在时时

倘若如长约束之表已存在外键约束,需要事先去外键约束再添加外键约束。如果非存在外键约束好长外键约束。

语法:

if exists(select * from sysobjects where
name=约束名)
alter table 数据库名.[dbo].表名 drop
constraint 约束名;
alter table 数据库名.[dbo].表名 with
check add constraint 约束名 foreign key(列名)
references 数据库名.[dbo].表名(列名)

on delete cascade
on update cascade;
go

示例:

if exists(select * from sysobjects where
name=’t1_t2′)
alter table [testss].[dbo].[test1]
drop constraint t1_t2;
alter table [testss].[dbo].[test1]
with check add constraint t1_t2 foreign key(classid)
references
[testss].[dbo].[test2](id)
on delete cascade
on update cascade;
go

图片 12

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

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

图片 13

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

图片 14

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

图片 15

于新表中开创外键

 语法:

if exists( select * from sysobjects where
name=表名 and type =’U’)
drop table 表名;
go

–当表结构不有时时
–建表语法声明
create table 表名
(
–字段声明
列名 int identity(1,1) not null,
列名 int,
primary key clustered(id asc)
with(ignore_dup_key=off) on [primary], –主键索引声明
constraint 外键名 foreign key(列名)

references 主表名(列名)
on update cascade–是否级联操作
on delete cascade
)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’列名’;

go

示例:

if exists( select * from sysobjects where
name=’test1’and type =’U’)
drop table test1;
go

–当表结构不在时时
–建表语法声明
create table test1
(
–字段声明
id int identity(1,1) not null,
name nvarchar(50) null,
sex nvarchar(50) null,
age nvarchar(50) null,
classid int,
primary key clustered(id asc)
with(ignore_dup_key=off) on [primary], –主键索引声明
constraint t3_t4 foreign key(classid)

references test2 (id)
on update cascade
on delete cascade
)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

图片 16

以T-SQL脚论上加主键约束

FOREIGN KEY约束优缺点

优点:

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

2、关联查询时,可以用到FK 的统计信息。

3、有预兆外键的数据库设计可以增加ER图的可读性。

缺点:

1、删队或者更新关联数据经常得举行检查,效率会好没有。

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

3、批量导入数据时,会是外键校验,需要事先关外键约束,导入好再打开外键约束,操作比较麻烦。

 

采取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);

图片 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、在数据库进行多少统一时会比较累。 

 

留下评论

网站地图xml地图