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。默认为可空
三、反思总结#
通过博客文字描述,再一次加深了对完整性约束的定义以及具体操作,完整性约束属于数据库的基础性知识。
在具体业务中,设计表的结构时,就需要在数据库服务器上利用约束来限制用户的非法操作,而不是在客户端检查约束。在数据库服务器上作约束,开发客户端程序会简单很多。
四、参考引用#
02-SQL必知必会(第3版)
作者:caojun97
出处:https://www.cnblogs.com/caojun97/p/17104803.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南