菜单

SQLServer之PRIMARY KEY约束

2018年12月25日 - MySQL

动用T-SQL脚本添加外键约束

PRIMARY KEY约束添加规则

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

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

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

4、一般情状下一个表中只可以有一个主键。

在新表中创立外键

 语法:

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

图片 1

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

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

图片 2

2、在新窗口中-》按下ctrl键,采用多行-》右键点击-》采纳安装主键-》点击保存(或者ctrl+s)。

图片 3

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

图片 4

当表结构已存在时

若是要抬高约束的表已存在外键约束,需要先删除外键约束再添加外键约束。假如不存在外键约束可以加上外键约束。

语法:

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

图片 5

行使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);

图片 6

图片 7

FOREIGN KEY约束优缺点

优点:

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

2、关联查询时,可以用到FK 的总结音讯。

3、有主外键的数据库设计可以追加ER图的可读性。

缺点:

1、删队或更新关联数据时需要做检讨,效能会很低。

2、手工调数据时,会存在主从表校验,会比较费心。

3、批量导入数据时,会存在外键校验,需要先关闭外键约束,导入完成再打开外键约束,操作相比费力。

 

PRIMARY KEY约束优缺点

优点:

1、简单、效率高。 

2、保证数据完整性。

3、不会有空值。

4、不允许存在重新值。

缺点:

1、主键自增一般采用int型,有数据条数的范围。

2、在数据库举办数据统一时会相比费心。 

 

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

本示例演示当表结构已存在时添加外键约束,创制表时添加外键约束步骤和表结构存在时添加外键步骤一样。示例演示如下:

1、连接数据库,打开要添加外键的多少表-》右键点击-》拔取设计。

图片 8

2、在表设计窗口-》采纳要添加外键的数目行-》右键点击-》拔取涉及。

图片 9

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

图片 10

4、添加完毕后-》首先修改表和列规范。

图片 11

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

图片 12

6、在外键关系窗口中-》可接纳丰裕或者不添加外键描述-》可挑选充裕或者不添加修改或者去除数据时级联操作-》可选用丰盛或者不添加强制外键约束-》可挑选丰硕或者不添加强制用于复制-》点击关闭。

图片 13

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

图片 14

图片 15

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

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

图片 16

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

图片 17

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

图片 18

 

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) 的列。

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

接纳SSMS数据库管理工具添加主键约束

应用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

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图