SQL Server教程:六大约束
一、问题引入
在复习关系型数据库过程中,对于数据库的完整性约束总是一知半解。而且数据库的约束是关系型数据库的重点内容,课本翻过来翻过去好像看懂了,但是通过书面语描述出来又有点困难。
这里借助博客的方式,书面描述数据的约束以及具体操作
二、解决过程
关系型数据约束有六种:主键约束、外键约束、唯一约束、默认值约束、检查约束、非空(NOT NULL)约束
2-1 主键约束(PRIMARY KEY)
主键是一种特殊的约束,它用来保证一个列(或一组列)中的值是唯一的,并且永不改动。
💡 没有主键,要安全地 update 或 delete 特定的行而不影响其他行会非常困难
create table 表名
(
_id int not null primary key,
name char(10)
)
-- 或者
create table 表名
(
_id int not null,
name char(10),
primary key(_id)
)
-- 或者
alter table 表名
add constraint primary key (_id);
2-2 外键约束(FOREIGN KEY)
外键是表中的一个列,其值必须在另一个表的主键列出。
外键是保证引用完整性的一个重要成分,表与表之间的关系就是通过外键体现的。
💡 外键可帮助防止意外的删除
create table 表名1
(
_id int not null primary key,
_name char(10) not null references 表名2(_name)
)
-- 或者
alter table 表名1
add constraint
foreign key (_name) references 表名2 (_name)
2-3 唯一约束
唯一约束用来保证一个列(或一组列)中的数据唯一。唯一约束和主键约束很像,但是有区别:
create table 表名
(
_id int not null primary key,
id_card char(18) unique
)
-- 或者
alter table 表名
add constraint 约束名称
unique (列名)
2-4 检查约束
检查约束用来保证一个列(或一组列)中的数据满足一组指定的条件。
条件:
检查最小或最大值
指定范围
只允许特定的值
create table 表名
(
_id int not null primary key,
quantity int not null check(quantity > 0)
sex char(1) not null check(sex like '[MF]')
)
2-5 默认值约束
默认值约束可以在插入数据时,若不给定列的值,表会按照预先规定给与默认的值。
例如:希望自动获取系统时间,无需用户提供;自动获取自增主键的值,无需用户提供
create table 表名
(
oid UNIQUEIDENTIFIER DEFAULT NEWID(),
timestamp datetime2(0) DEFAULT GETDATE()
)
2-6 非空约束
非空约束可以避免列值为null的情形,列为null会增加表的存储空间。
默认情况下,如果未指定NOT NULL约束,SQL Server将允许列接受NULL。默认为可空
三、反思总结
通过博客文字描述,再一次加深了对完整性约束的定义以及具体操作,完整性约束属于数据库的基础性知识。
在具体业务中,设计表的结构时,就需要在数据库服务器上利用约束来限制用户的非法操作,而不是在客户端检查约束。在数据库服务器上作约束,开发客户端程序会简单很多。
四、参考引用
01-史上最全的 MSSQL 复习笔记
02-SQL必知必会(第3版)