SQL的五大约束

当我们在创建数据库的表和字段时,我们总是说要声明约束,那约束究竟是什么呢?那么又如何在创建表时或者已经创建好了表之后通过添加删除来怎样进行约束呢?听我来说说吧!

【前言】

分为了五个部分:

  • 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
);

ALTER TABLE table_name语句

添加NOT NULL约束

ALTER TABLE Student
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 Student
ADD UNIQUE (SId)
对SId列添加UNIQUE约束
    

ALTER TABLE Student
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 Student
(
    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 NULL
);

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 

到这里我们就会有一个疑问了,明明一个表中只能有一个字段为主键,为什么这里还要联合多列为主键呢?其实我当时也有过这样的疑惑。请点击:mysql的联合主键与复合主键区别 - 简书

当我们约束PRIMARY KEY时,还需要特别注意一点:当对某列或者多个列进行PRIMARY KEY约束时,一定要保证你所约束的字段是NOT NULL的,如果不是,系统就会报错,无法进行约束。电脑前的小伙伴可以试试:当你所约束的字段不是NOT NULL时会时什么样的,自己动动手指试试吧!我当时就上了这个当,你们一定要谨记哈

五、FOREIGN KEY

外键约束

主键和外键创建了不同表中数据的相互关系

可能对这段抽象的文字有点疑惑。我来举个例子来看看吧

现有分别有两张学生信息表和学生所喜爱的电影信息表

Student
SIdeSAgeSName
117春花
219夏雪
315秋月

Films
FilmIdRatingSId
121
243
312

从图中我们会发现: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 Films
DROP CONSTRAINT fk_StuFils

【总结】

我们再实际业务场景中在选择约束时,需要根据具体的业务需求和数据规则进行考虑。考虑约束的性能影响,过多或复杂的约束可能会影响数据库的性能。因此,在选择约束时需要权衡数据完整性和性能之间的平衡

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
SQL Server外键约束是一种用于维护表之间关系的机制。它定义了一个表中的列与另一个表中的列之间的关联关系,以确保数据的完整性和一致性。外键约束可以防止插入、更新或删除操作导致数据不一致或错误的情况发生。 在SQL Server中,创建外键约束要先确保已经创建了主键,因为外键是引用主键的。通常情况下,外键约束是在创建表时添加的,但也可以在表已经存在的情况下通过修改表结构来添加外键约束。 要在SQL Server中使用代码实现外键约束,可以使用ALTER TABLE语句的ADD CONSTRAINT子句。具体来说,可以使用以下语法来添加外键约束: ALTER TABLE 子表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (子表列名称) REFERENCES 父表名称 (父表列名称); 其中,子表名称是待添加外键约束的表名,外键名称是给外键约束起的一个名称,子表列名称是子表中外键列的名称,父表名称是被引用的父表的名称,父表列名称是父表中被引用的列的名称。 举个例子,如果你想给一个名为vendors的表添加一个外键约束,将其关联到一个名为vendor_groups的表中的列vendor_group_id上,可以使用以下代码: ALTER TABLE vendors ADD CONSTRAINT fk_vendor_group FOREIGN KEY (vendor_group_id) REFERENCES vendor_groups(vendor_group_id); 这样一来,当你在vendors表中插入或修改vendor_group_id列的值时,系统会自动检查该值是否存在于vendor_groups表的vendor_group_id列中,以确保数据的一致性。 总结起来,SQL Server外键约束是一种用于维护表之间关系的机制,可以通过ALTER TABLE语句的ADD CONSTRAINT子句来添加外键约束。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SQL server 外键约束操作](https://blog.csdn.net/dyw_666666/article/details/88794126)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [SQL Server外键约束](https://blog.csdn.net/bujianleh/article/details/124475052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乔努力变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值