Loading

SQL Server教程:六大约束

一、问题引入#

在复习关系型数据库过程中,对于数据库的完整性约束总是一知半解。而且数据库的约束是关系型数据库的重点内容,课本翻过来翻过去好像看懂了,但是通过书面语描述出来又有点困难。

这里借助博客的方式,书面描述数据的约束以及具体操作

二、解决过程#

关系型数据约束有六种:主键约束、外键约束、唯一约束、默认值约束、检查约束、非空(NOT NULL)约束

2-1 主键约束(PRIMARY KEY)#

主键是一种特殊的约束,它用来保证一个列(或一组列)中的值是唯一的,并且永不改动。

💡 没有主键,要安全地 updatedelete 特定的行而不影响其他行会非常困难

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版)

作者:caojun97

出处:https://www.cnblogs.com/caojun97/p/17104803.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   eiSouthBoy  阅读(494)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu