数据库主键4种类型及6种约束

数据库主键4种类型及6种约束

2023年7月13日发(作者:)

数据库主键4种类型及6种约束导读:在看《SQL必知必会(第四版)》看到运⽤外键建⽴表关系,联想到⼯作时建表主键类型的选择问题,查资料的时候遇到了⽐较简洁的⼀个⽂章;1. 基础理论:1.主键和外键的设计原则。

a. 主键应尽量分离于业务的。

b. 主键应尽量是单列的,以便提⾼筛选和连接的效率。

c. 主键不应该被更新,且不含动态变化的数据。

d. 主键应是有计算机⾃动⽣成的。2.常见的主键选取⽅式

a.⾃动增长。

b.⼿动增长字段

Identifier

Combine 组合类型

⽬前再项⽬中⽤到了a,c两种。以下是

使⽤⾃增长做主键的优点:

1、很⼩的数据存储空间

2、性能最好

3、容易记忆

使⽤⾃增长做主键的缺点:

1、如果存在⼤量的数据,可能会超出⾃增长的取值范围

2、很难(并不是不能)处理分布式存储的数据表,尤其是需要合并表的情况下

3、安全性低,因为是有规律的,容易被⾮法获取数据

使⽤GUID做主键的优点:

1、它是独⼀⽆⼆的,出现重复的机会少

2、适合⼤量数据中的插⼊和更新操作,尤其是在⾼并发和分布式环境下

3、跨服务器数据合并⾮常⽅便

4、安全性较⾼

使⽤GUID做主键的缺点:

1、存储空间⼤(16 byte),因此它将会占⽤更多的磁盘空间

2、会降低性能

3、很难记忆COMB Combine 组合类型的⽅法:uuid+时间ID=CAST(CAST(NEWID() AS BINARY(10)) + CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)2. SQL 中的约束

2.1 Not Null

作⽤:强制字段始终包含值,若字段为null,⽆法插⼊或更新记录。/-- 创建表时添加 not null 约束create table table_NotNull( ID int identity(1,1) primary key, Name varchar(50) not null)/--对已经存在是某列添加not null 约束/--已存在的数据中 Name均有值

alter table _NotNull alter column Name varchar(20) not null/--已存在的数据中 存在Name为null 的情况。以后⽆法插⼊name=null 的数据alter table _NotNull with nocheck add constraint Name check(Name is not null)2.2 unique

作⽤:约束唯⼀标识数据库-表中的每条数据。create table table_Unique( ID int primary key Identity(1,1) not null, Name varchar(50) unique, Age int not null)alter table table_Unique add unique(Age)2.3 primary key

作⽤:主键,记录唯⼀标识,主键⾃动拥有not null及 unique约束。/--定义多个列的primaey key 约束create Table Table_PrimaryKey( Code varchar(20),//⾃动约束为not null DateInfo datetime,//⾃动约束为not null Name varchar(20) not null, constraint pk_Table_PrimaryKey Primary Key(Code,DateInfo)

)-- 主键列应申明不包含null 值ALTER TABLE Table_PrimaryKey ADD PRIMARY KEY (Code )ALTER TABLE Table_PrimaryKey ADD CONSTRAINT pk_PersonID PRIMARY KEY (Code,DateInfo)2.4 foreign key

作⽤:外键,预防破坏表之间的连接⾏为,防⽌⾮法数据插⼊外键列。create Table Table_ForeignKey( Id int identity(1,2) primary key, Code int, DateInfo datetime, constraint fk_ForeignKey foreign key(Code) references table_Unique(ID))

--撤销外键约束 定义外键且已命名ALTER TABLE [dbo].[Table_ForeignKey] drop constraint fk_ForeignKey2.5 Check

作⽤:限制列的取值范围create Table Table_Check( Id int identity(1,2) primary key, Age int not null, State int, constraint ck_Check check(Age>20 and State in (0,1)))

--删除同上2.6 DEFAULT

作⽤:设置默认值create Table Table_DEFAULT( Id int identity(1,2) primary key, Age int not null, State int, Name varchar(20) DEFAULT 'Sandnes')

--更改ALTER TABLE Table_DEFAULT ALTER COLUMN City

SET DEFAULT 'ss' (drop DEFAULT )参考:1. 优缺点

2. 4中常见⽅法

基础:

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689245417a225578.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信