mysql常用约束

什么是约束

在 MySQL 里,约束(Constraint)用来限制表中数据的有效性和完整性。

约束保证了数据的合法性,防止脏数据进入数据库。

常见约束包括:

  • 主键约束(PRIMARY KEY)
  • 唯一约束(UNIQUE)
  • 非空约束(NOT NULL)
  • 默认值(DEFAULT)
  • 外键约束(FOREIGN KEY)
  • 自动递增(AUTO_INCREMENT)
  • 检查约束(CHECK)

一、主键约束 PRIMARY KEY

  • 唯一标识表中的每一条记录
  • 不允许重复,也不能为空

示例:

sql 复制代码
CREATE TABLE student(
    id INT PRIMARY KEY,
    name VARCHAR(20),
    age TINYINT
);

特点:

  • 每张表通常只有一个主键
  • 主键列默认隐含 NOT NULL

二、唯一约束 UNIQUE

  • 保证列的值唯一
  • 可以有多个唯一约束列

示例:

sql 复制代码
CREATE TABLE user(
    id INT PRIMARY KEY,
    username VARCHAR(30) UNIQUE,
    email VARCHAR(50) UNIQUE
);

说明:

  • username、email 都不允许重复
  • 但可以为空(如果不加 NOT NULL)

三、非空约束 NOT NULL

  • 不允许字段为 NULL
  • 确保每条记录都有值

示例:

sql 复制代码
CREATE TABLE student(
    id INT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    age TINYINT
);

说明:

  • name 字段不能为空
  • age 可以为空

四、默认值 DEFAULT

  • 给字段设置默认值
  • 插入数据时如果不写该字段,则使用默认值

示例:

sql 复制代码
CREATE TABLE student(
    id INT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    age TINYINT DEFAULT 18
);

说明:

  • age 没有指定值时,自动为 18

五、自动递增 AUTO_INCREMENT

  • 常用在主键列
  • 每插入一条记录自动加 1

示例:

sql 复制代码
CREATE TABLE student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL
);

说明:

  • 插入数据时不写 id,系统会自动生成
  • 通常配合主键一起使用

六、外键约束 FOREIGN KEY

  • 用于保证表之间的数据一致性
  • 一张表的字段引用另一张表的主键

示例:

sql 复制代码
CREATE TABLE class(
    id INT PRIMARY KEY,
    name VARCHAR(20)
);

CREATE TABLE student(
    id INT PRIMARY KEY,
    name VARCHAR(20),
    class_id INT,
    FOREIGN KEY (class_id) REFERENCES class(id)
);

说明:

  • student.class_id 必须存在于 class.id
  • 防止出现没有对应班级的学生

七、检查约束 CHECK

  • 用于限制字段值的范围
  • MySQL 8.0+ 才完全支持

示例:

sql 复制代码
CREATE TABLE student(
    id INT PRIMARY KEY,
    name VARCHAR(20),
    age TINYINT CHECK(age BETWEEN 0 AND 120)
);

说明:

  • age 必须在 0~120 之间
  • 不符合条件的插入会报错

八、约束总结

约束 用途 常用场景
PRIMARY KEY 主键唯一且不为空 表唯一标识
UNIQUE 保证字段值唯一 用户名、邮箱
NOT NULL 字段不能为空 必填字段
DEFAULT 默认值 插入数据时未指定字段
AUTO_INCREMENT 自动递增 主键自增
FOREIGN KEY 外键约束 表关联
CHECK 数据有效性限制 数值范围、枚举等

建表常用组合示例

sql 复制代码
CREATE TABLE user(
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(30) NOT NULL UNIQUE,
    password VARCHAR(100) NOT NULL,
    email VARCHAR(50) UNIQUE,
    age TINYINT DEFAULT 18,
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

说明:

  • 主键 id 自动递增
  • username 不允许为空且唯一
  • email 唯一
  • age 默认 18
  • create_time 默认当前时间
相关推荐
薪火铺子2 小时前
MySQL 性能优化:慢查询与索引优化实战
数据库·mysql·性能优化
南境十里·墨染春水2 小时前
C++ 日志 4—— 多线程安全与异步日志优化
数据库·c++·安全
七夜zippoe2 小时前
DolphinDB索引设计:提升查询性能
数据库·索引·性能·查询·dolphindb
2401_898717662 小时前
HTML5中SVG原生动画标签Animate的基础用法
jvm·数据库·python
小江的记录本2 小时前
【MySQL】《MySQL基础架构 面试核心考点问答清单》
前端·数据库·后端·sql·mysql·adb·面试
猫的玖月2 小时前
(七)函数
android·数据库·sql
2401_867623982 小时前
mysql如何导出特定条件的查询数据_使用mysqldump加where参数
jvm·数据库·python
会编程的土豆2 小时前
MySQL 窗口函数详解
数据库·后端·mysql
武帝为此3 小时前
【软件开发日志介绍】
java·前端·数据库
likerhood3 小时前
Java 反射与注解的详细讲解
java·开发语言·数据库