菜单

SQLServer之PRIMARY KEY约束

2018年12月26日 - sqlite

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地图