SQL常见约束及外键约束删除更新行为

一.约束

1.概念

约束是作用于表中字段上的规则,用于限制存储在表中的数据。

2.目的:

保证数据库中数据的正确、有效性和完整性。

3.添加约束两种方式

可以在创建表/修改表的时候添加约束。

在为字段添加约束时,我们只需要在字段之后加上约束的关键字即可

二.约束分类

SQL中的约束用于确保数据库中数据的完整性、唯一性和一致性。常见的SQL约束分类包括:

1.非空约束(NOT NULL)

指定该字段不能为空。

  • 例如,在创建学生表时,将学生ID和姓名字段设置为非空,以确保每个学生都有一个唯一的标识符和一个名字。
sql 复制代码
CREATE TABLE Students (
    StudentID int NOT NULL,
    Name varchar(255) NOT NULL
);
2. 默认约束(DEFAULT)

指定一个默认值来设置默认约束。

例如,在创建员工表时,将入职日期字段设置为默认值为'2023-01-01',如果没有提供入职日期,则默认使用这个日期。

sql 复制代码
CREATE TABLE Employees (
    EmployeeID int NOT NULL AUTO_INCREMENT,
    JoinDate date DEFAULT '2023-01-01'
);
3. 唯一约束(UNIQUE)

指定该字段的值必须是唯一的,不允许重复。

例如,在创建用户表时,将电子邮件地址字段设置为唯一,以确保每个用户的电子邮件地址都是唯一的。

sql 复制代码
CREATE TABLE Users (
    UserID int NOT NULL AUTO_INCREMENT,
    Email varchar(255) UNIQUE
);
4. 主键约束(PRIMARY KEY)

指定表中的某个字段或字段组合必须是唯一的

例如,在创建订单表时,将订单ID字段设置为主键,以确保每个订单都有一个唯一的标识符。

sql 复制代码
CREATE TABLE Orders (
    OrderID int NOT NULL AUTO_INCREMENT,
    CustomerID int,
    PRIMARY KEY (OrderID)
);

注意:

当指定一个字段为主键时,该字段必须是非空且唯一的 主键的主要特点如下: 唯一性:主键的值必须是唯一的,这意味着在任何时候,表中都不能有两行具有相同的主键值。这保证了每一行数据都能被唯一地区分和识别。 非空:主键字段不允许接受空值(NULL)。这是为了确保每一行都可以通过主键字段进行标识和访问。

5. 外键约束(FOREIGN KEY)

用于建立两个表之间的链接,指向另一个表的主键。

添加`FOREIGN KEY`关键字并指定引用的主键字段来设置外键约束。

外键用于建立两个表之间的链接,确保数据的一致性和完整性。

例如,在创建订单详情表时,将订单ID字段设置为外键,并引用订单表中的订单ID字段,以确保订单详情与相应的订单相关联

sql 复制代码
CREATE TABLE OrderDetails (
    OrderDetailID int NOT NULL,
    OrderID int,
    ProductID int,
    PRIMARY KEY (OrderDetailID),
    FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
6. 检查约束(CHECK)

检查约束用于限制字段的值必须满足特定的条件。

(注意:MySQL不支持CHECK约束的直接语法,但可以通过触发器实现):

在其他支持CHECK约束的数据库中,可以这样创建:

在创建表时,通过在字段后面添加`CHECK`关键字并指定一个逻辑表达式来设置检查约束。

例如,在创建产品表时,将价格字段设置为检查约束,确保价格大于0。

sql 复制代码
CREATE TABLE Products (
    ProductID int NOT NULL,
    Price decimal(10, 2) CHECK (Price > 0)
);

三.外键约束

1.什么是外键约束?

用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性

2.两种创建方式
1.创建表时创建外键约束

CREATE TABLE 表名( 字段名 数据类型, ... [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) );

2.对存在的表创建外键

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;

注意 主表要有主键,才能顺利添加从表外键 而外键关联的时候从表字段一定是关联和主表的主键,但是从表有没有主键则无关紧要

3.删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

4. 删除/更新行为

添加了外键之后,在删除更新父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行为有以下几种

1. RESTRICT /NO ACTION(限制)

如果在父表上有关联的子表记录存在,那么父表上的记录不能被删除或更新。这是默认的约束行为。

sql 复制代码
ALTER TABLE 子表 ADD CONSTRAINT fk_外键列 FOREIGN KEY (外键列) REFERENCES 父表(主键列) ON DELETE RESTRICT ON UPDATE RESTRICT; 
ALTER TABLE 子表 ADD CONSTRAINT fk_外键列 FOREIGN KEY (外键列) REFERENCES 父表(主键列) ON DELETE NO ACTION ON UPDATE NO ACTION; 
2. CASCADE(级联)

当父表上的记录被删除或更新时,关联的子表记录也会被对应删除或更新。

sql 复制代码
ALTER TABLE 子表 ADD CONSTRAINT fk_外键列 FOREIGN KEY (外键列) REFERENCES 父表(主键列) ON DELETE CASCADE ON UPDATE CASCADE
3. SET NULL(设置为NULL)

当父表上的记录被删除或更新时,子表中的外键列会被设置为NULL。

sql 复制代码
ALTER TABLE 子表 ADD CONSTRAINT fk_外键列 FOREIGN KEY (外键列) REFERENCES 父表(主键列) ON DELETE SET NULL ON UPDATE SET NULL;
4. SET DEFAULT(设置为默认值)

当父表上的记录被删除或更新时,子表中的外键列会被设置为默认值。

sql 复制代码
ALTER TABLE 子表 ADD CONSTRAINT fk_外键列 FOREIGN KEY (外键列) REFERENCES 父表(主键列) ON DELETE SET DEFAULT ON UPDATE SET DEFAULT;
相关推荐
Channing Lewis24 分钟前
sql server如何创建表导入excel的数据
数据库·oracle·excel
秃头摸鱼侠25 分钟前
MySQL安装与配置
数据库·mysql·adb
UGOTNOSHOT29 分钟前
每日八股文6.3
数据库·sql
行云流水行云流水1 小时前
数据库、数据仓库、数据中台、数据湖相关概念
数据库·数据仓库
John Song1 小时前
Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot
数据库·redis·哈希算法
IvanCodes1 小时前
七、Sqoop Job:简化与自动化数据迁移任务及免密执行
大数据·数据库·hadoop·sqoop
tonexuan1 小时前
MySQL 8.0 绿色版安装和配置过程
数据库·mysql
JohnYan1 小时前
工作笔记- 记一次MySQL数据移植表空间错误排除
数据库·后端·mysql
我最厉害。,。2 小时前
Windows权限提升篇&数据库篇&MYSQL&MSSQL&ORACLE&自动化项目
数据库·mysql·sqlserver
远方16092 小时前
20-Oracle 23 ai free Database Sharding-特性验证
数据库·人工智能·oracle