Jw
首页
技术
英语
首页
技术
英语
  • MySQL

    • MySQL 基础
    • 环境变量配置(PATH)
    • SQL 语法与分类
    • MySQL 数据类型
    • SQL - DDL 数据定义语言
    • SQL - DML 数据操作语言
    • SQL - DQL 数据查询语言
    • SQL - DCL 数据控制语言
    • MySQL 函数
    • SQL 约束
    • SQL 外键约束
    • 多表关系
    • 多表查询(连接查询)
    • 隐式内连接 vs 显式内连接
    • 子查询
    • 多表查询案例
    • 事务
    • 并发事务问题与隔离级别
    • MySQL 体系结构与存储引擎
    • 索引概述
    • 索引结构
    • 索引分类
    • 索引语法
    • SQL 性能分析
    • 索引使用
    • 索引设计原则
    • SQL 优化 - 插入数据与主键优化
    • SQL 优化 - order by 与 group by
    • SQL 优化 - limit / count / update
    • 视图
    • 存储过程
    • 存储过程 - 变量
    • 存储过程 - 流程控制、游标与条件处理
    • 存储函数
    • 触发器
    • 锁概述与全局锁
    • 表级锁
    • 行级锁
    • InnoDB 逻辑存储结构
    • InnoDB 架构
    • 事务原理(redo / undo log)
    • MVCC
    • MySQL 系统数据库
    • MySQL 常用工具
    • 数据备份与导入导出
    • 错误日志与二进制日志
    • 查询日志与慢查询日志
    • 主从复制 - 概述与原理
    • 主从复制 - 搭建
    • Mycat 配置
    • Mycat 垂直拆分与水平拆分
    • Mycat 分片规则
    • Mycat 管理与监控
    • Mycat 读写分离 - 一主一从
    • Mycat 读写分离 - 双主双从

SQL 约束

约束是作用于表中字段上的规则,用于限制存储在表中的数据;目的是保证数据库中数据的正确、有效性和完整性。 约束可以在创建表 / 修改表时添加。

一、约束分类

约束描述关键字
非空约束限制该字段的数据不能为 nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束保证字段值满足某一个条件(8.0.16 版本之后)CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

主键自增用 AUTO_INCREMENT(与 PRIMARY KEY 搭配)。

二、约束演示

CREATE TABLE user(
    id      INT         PRIMARY KEY AUTO_INCREMENT COMMENT '用户id',
    name    VARCHAR(10) NOT NULL UNIQUE COMMENT '姓名',
    age     INT         CHECK (age > 0 && age < 120) COMMENT '年龄',
    status  CHAR(1)     DEFAULT 1 COMMENT '状态',
    gender  CHAR(1)     COMMENT '性别'
) COMMENT '用户表';

插入数据验证各约束:

-- 正常插入
INSERT INTO user(name, age, status, gender) VALUES ('Tom', 18, '0', '男'), ('Tom2', 15, '0', '男');

-- 报错:姓名重复,违反唯一约束
INSERT INTO user(name, age, status, gender) VALUES ('Tom3', 15, '0', '男');

-- 报错:姓名为 null,违反非空约束
INSERT INTO user(name, age, status, gender) VALUES (null, 15, '0', '男');

-- 报错:年龄为 -1,违反检查约束
INSERT INTO user(name, age, status, gender) VALUES ('Tom4', -1, '0', '男');

-- 成功:未指定 status,取默认值 1
INSERT INTO user(name, age, gender) VALUES ('Tom5', 80, '男');

违反约束时 INSERT 直接报错,数据不会写入。

三、案例:按需求建表

字段名字段含义字段类型约束条件约束关键字
idID 唯一标识int主键,并且自动增长PRIMARY KEY, AUTO_INCREMENT
name姓名varchar(10)不为空,并且唯一NOT NULL, UNIQUE
age年龄int大于 0,并且小于等于 120CHECK
status状态char(1)如果没有指定该值,默认为 1DEFAULT
gender性别char(1)无—
CREATE TABLE tb_user(
    id      INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID唯一标识',
    name    VARCHAR(10) NOT NULL UNIQUE COMMENT '姓名',
    age     INT CHECK (age > 0 && age <= 120) COMMENT '年龄',
    status  CHAR(1) DEFAULT '1' COMMENT '状态',
    gender  CHAR(1) COMMENT '性别'
);

四、速查

字段 类型 NOT NULL                      -- 非空
字段 类型 UNIQUE                        -- 唯一
字段 类型 PRIMARY KEY [AUTO_INCREMENT]   -- 主键(+ 自增)
字段 类型 DEFAULT 默认值                 -- 默认
字段 类型 CHECK (条件)                   -- 检查

相关

  • SQL 外键约束:外键语法与删除/更新行为
  • SQL - DDL:建表、改表语句
  • MySQL 数据类型:数值 / 字符串 / 日期时间
最近更新: 2026/10/9 13:25
Contributors: liujw
Prev
MySQL 函数
Next
SQL 外键约束