数据库主键 4种类型及6种约束 |
您所在的位置:网站首页 › 讲授语的类型一般有几种 › 数据库主键 4种类型及6种约束 |
导读:在看《SQL必知必会(第四版)》看到运用外键建立表关系,联想到工作时建表主键类型的选择问题,查资料的时候遇到了比较简洁的一个文章; 1. 基础理论: 1.主键和外键的设计原则。 a. 主键应尽量分离于业务的。 b. 主键应尽量是单列的,以便提高筛选和连接的效率。 c. 主键不应该被更新,且不含动态变化的数据。 d. 主键应是有计算机自动生成的。 2.常见的主键选取方式 a.自动增长。 b.手动增长字段 c.UniqueIdentifier d.COMB 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 dbo.table_NotNull alter column Name varchar(20) not null /--已存在的数据中 存在Name为null 的情况。以后无法插入name=null 的数据 alter table dbo.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. 优缺点 http://www.yyjjssnn.cn/articles/754.html 2. 4中常见方法 http://blog.sina.com.cn/s/blog_5f39af320102wsfs.html 3.sql 基础:http://www.runoob.com/sql/sql-default.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |