数据库

本文详细介绍了数据库中的四种主要约束:NOT NULL约束确保字段不为空,UNIQUE约束保证列中值的唯一性,CHECK约束限制列值的范围,而PRIMARY KEY和FOREIGN KEY则涉及主键和外键,建立表间的关系。通过创建、修改和删除这些约束,可以更好地管理和维护数据库的完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们在创建数据库的表和字段时,我们总是说要声明约束,那约束究竟是什么呢?那么又如何在创建表时或者已经创建好了表之后通过添加删除来怎样进行约束呢?听我来说说吧!
 
【前言】
分为了五个部分:
NOT NULL:指定某列不能存储NULL(未知,但不是空)值,强制要求字段必须要包含值
UNIQUE:唯一约束,防止一个特定的列中两个记录有一致的值
CHECK:检查约束,保证列中的值符合指定的条件。用于限制列中的值的范围
PRIMARY KEY:主键约束,确保某列必须要有唯一标识符
FOREIGN KEY:外键约束,主键和外键创建了不同表中数据的相互关系
分为了两种情况:
在创建表时规定(CREATE TABLE table_name)
在创建表之后规定(ALTER TABLE table_name)
 
【正文】
一、NOT NULL
在默认情况下,表接受NULL 值
约束强制列不接受NULL 值
<举例>
CREATE TABLE table_name语句
现要创建一个学生信息表,对表中的列进行约束
CREATE TABLE Student
(
SId int NOT NULL
SAge int NOT NULL
);
LTER TABLE table_name语句
添加NOT NULL约束
ALTER TABLE Stude
ADD COLUMN Student int NOT NULL;
在一个创建好的学生信息表中添加NOT NULL约束

二、UNIQUE
唯一约束
防止一个特定的列中两个记录有一致的值
<举例>
CREATE TABLE table_name语句
现要创建一个学生信息表,对SName列进行UNIQUE约束
.
CREATE TABLE Student

SId int

SName varchar(50)
SAge int UNIQUE
);

当要对多个列进行约束时:对SId列和SName列进行UNIQUE约束
CREATE TABLE Student

SId int,
SName varchar(50)
SAge int UNIQUE,
CONSTRAINT uc_PersonId UNIQUE (SId, SName)
);
ALTER TABLE table_name语句
添加UNIQUE约束:
.
ALTER TABLE Studen
ADD UNIQUE (SId)
对SId列添加UNIQUE约束
ALTER TABLE Studen
ADD CONSTRAINT uc_PersonID UNIQUE (SId, SName)
当要对多个列进行约束时:对SId列和SName列进行UNIQUE约束
删除UNIQUE约束
ALTER TABLE Student
DROP CONSTRATIN uc_PersonId

注:在对ALTER TABLE table_name语句进行UNIQUE约束时,会发现多了一个uc_PersonId,这个是什么呢?
uc_PersonId是一个联合约束名,就是UNIQUE CONSTRAINT的缩写(意思是唯一约束),就是对表中的SId列和SName列进行强制约束。
 
 
三、CHECK
检查约束
保证列中的值符合指定的条件
用于限制列中的值的范围
<举例>
CREATE TABLE table_name语句
现要建一个学生信息表,对表中的SAge列进行范围约束
.
CREATE TABLE Student

SId int NOT NULL,
SName varchar(50) NOT NULL,
SAge int CHECK(SAge >= 0)
);

从语句中我们可以看出,对SAge这个列进行了一个CHECK约束,强制要求它的范围必须大于等于0,按照常识,我们的年龄不可能比0还小,当它超出了所约束的范围时,系统就会报错
当要对多个列进行约束时:对SId列和SName列进行CHECK约束
.
CREATE TABLE Stude

SId int NOT NULL,
SName varchar(50),
SAge int NOT NULL,
CONSTRAINT chk_PersonId (SId >0 AND SAge >=0)
ALTER TABLE table_name语句
添加约束:
.
ALTER TABLE Student
ADD CHECK (SId>0)
ALTER TABLE Student
ADD CONSTRAINT chk_PersonId CHECK (SId >0 AND SAge >=0)
对多行表进行约束
对已创建好的Student表中的SId列和SAge列进行约束
删除约束
ALTER TABLE Student
DROP CONSTRAINT chk_PersonId 
 
四、PRIMARY KEY
主键约束
在所有约束中,最重要的,也最常用。要向符合第一范式,则每个表中都必须有一个主键(提供表之间的链接)
是UNIQUE约束和NOT NULL约束的组合
确保某列必须要有唯一标识符
主键约束不可重复,不可NULL值
<举例>
CREATE TABLE table_name 语句
现要创建一个学生信息表,对SId列进行主键PRIMARY KEY约束
CREATE TABLE Student
(
SId int NOT NULL PRIMARY KEY,
SName varchar(50) NOT NULL,
SAge int NOT NUL
);
ALTER TABLE table_name语句
添加约束
.
ALTER TABLE Student
ADD PRIMARY KEY (SId)
对SId列进行PRIMARY KEY约束
ALTER TABLE Student
ADD CONSTRAINT uc_PersonId PRIMARY KEY (SId, SName)
对SId列和SName列进行联合主键约束
.
删除PRIMARY KEY约束
.
ALTER TABLE Student
DROP CONSTRAINT uc_PersonId
.
到这里我们就会有一个疑问了,明明一个表中只能有一个字段为主键,为什么这里还要联合多列为主键呢?其实我当时也有过这样的疑惑。请点击:https://www.jianshu.com/p/8625b3b639b3
当我们约束PRIMARY KEY时,还需要特别注意一点:当对某列或者多个列进行PRIMARY KEY约束时,一定要保证你所约束的字段是NOT NULL的,如果不是,系统就会报错,无法进行约束。电脑前的小伙伴可以试试:当你所约束的字段不是NOT NULL时会时什么样的,自己动动手指试试吧!我当时就上了这个当,你们一定要谨记哈
 
 
五、FOREIGN KEY
外键约束
主键和外键创建了不同表中数据的相互关系
可能对这段抽象的文字有点疑惑。我来举个例子来看看吧
现有分别有两张学生信息表和学生所喜爱的电影信息表
Student
SIde SAge SName
1 17 春花
2 19 夏雪
3 15 秋月
 
Films
FilmId Rating SId
1 2 1
2 4 3
3 1 2
从图中我们会发现:Student表中的SId列是Student表的PRIMARY KEY
                                 Films表中的SIde列是Films表中的FOREIGN KEY
                                 Student表中的SId列指向了Films表中的SId
 Student表和Films表中的主键和外键使两个表创建了连接关系
举例
CREATE TABLE table_name语句
现有一个Student表,创建一个Films表,对SIde列进行外键约束
CREATE TABLE Films

FilmId int NOT NULL PRIMARY KEY,
Rating int NOT NULL,
SId int FOREIGN KEY REFERENCES Student(SId)
);
.
前提:必须有另一个已经建好的要联系的表
ALTER TABLE table_name语句
添加主键
ALTER TABLE Films
ADD CONSTRAINT fk_StuFils FOREIGN KEY (SId)
REFERENCES Student (SId)
删除主键
ALTER TABLE Film
DROP CONSTRAINT fk_StuFils
.

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值