SQL:Constraint(约束)

目录

[🎯 什么是 Constraint?](#🎯 什么是 Constraint?)

[MySQL 中常见的约束类型:](#MySQL 中常见的约束类型:)

[1. PRIMARY KEY](#1. PRIMARY KEY)

[2. FOREIGN KEY](#2. FOREIGN KEY)

[3. UNIQUE](#3. UNIQUE)

[4. NOT NULL](#4. NOT NULL)

[5. DEFAULT](#5. DEFAULT)

[6. CHECK(MySQL 8.0+)](#6. CHECK(MySQL 8.0+))

[7. AUTO_INCREMENT](#7. AUTO_INCREMENT)

🎯 什么是 Constraint?

Constraint(约束) 是你在创建表时指定的一组规则,用于限制字段中允许的值,以防止无效、重复或不一致的数据写入数据库。

MySQL 中常见的约束类型:

约束类型 作用描述
PRIMARY KEY 标识表中唯一的记录(不能重复,不能为 NULL)
FOREIGN KEY 保证两个表之间的引用一致性(建立关联)
UNIQUE 限制某列中的值不能重复
NOT NULL 限制字段值不能为空
DEFAULT 给字段设置默认值
CHECK 限制字段值必须满足指定的逻辑表达式(MySQL 8.0+ 才正式支持)
AUTO_INCREMENT 自动生成唯一的整数(通常用于主键)

1. PRIMARY KEY

  • 用于唯一标识表中每一行记录;

  • 通常只设置一个主键;

  • 自动包含 NOT NULLUNIQUE 约束。

sql 复制代码
CREATE TABLE students (
  student_id INT PRIMARY KEY,
  name VARCHAR(100)
);

2. FOREIGN KEY

  • 建立两个表之间的联系;

  • 确保外键列中的值在父表中必须存在。

sql 复制代码
CREATE TABLE courses (
  course_id INT PRIMARY KEY,
  course_name VARCHAR(100)
);

CREATE TABLE enrollments (
  student_id INT,
  course_id INT,
  FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

3. UNIQUE

  • 限制某列中的值不能重复;

  • 不限制 NULL 值(NULL 不视为"重复")。

sql 复制代码
CREATE TABLE users (
  user_id INT PRIMARY KEY,
  email VARCHAR(100) UNIQUE
);

4. NOT NULL

  • 防止列接受 NULL 值;

  • 常用于业务关键字段,如姓名、价格等。

sql 复制代码
CREATE TABLE products (
  product_id INT PRIMARY KEY,
  name VARCHAR(100) NOT NULL
);

5. DEFAULT

  • 如果插入时未指定该列的值,则自动填入默认值。
sql 复制代码
CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  status VARCHAR(20) DEFAULT 'pending'
);

6. CHECK(MySQL 8.0+)

  • 验证列值是否满足条件;

  • 在旧版本中会忽略,不生效。

sql 复制代码
CREATE TABLE employees (
  emp_id INT PRIMARY KEY,
  age INT CHECK (age >= 18)
);

7. AUTO_INCREMENT

  • 自动为每一行生成唯一编号;

  • 常和主键一起使用。

sql 复制代码
CREATE TABLE customers (
  customer_id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100)
);
相关推荐
lang2015092816 小时前
MySQL 8.0原子性DDL全面解析
数据库·mysql
viperrrrrrrrrr716 小时前
milvus向量数据库
数据库·大模型·llm·milvus
白衣鸽子17 小时前
MySql数据库同步技术:构建高可用架构的基石
数据库·后端
不良人天码星17 小时前
redis的事务,以及watch的原理
数据库·redis·缓存
韩立学长17 小时前
基于微信小程序的公益捐赠安全平台9hp4t247 包含完整开发套件(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·微信小程序·小程序
智能化咨询17 小时前
SQL之参数类型讲解——从基础类型到动态查询的核心逻辑
数据库·oracle
doris820417 小时前
使用Yum安装Redis
数据库·redis·缓存
有一个好名字17 小时前
万字 Apache ShardingSphere 完全指南:从分库分表到分布式数据库生态
数据库·分布式·apache
Boilermaker199218 小时前
【Redis】哨兵与对脑裂的情况分析
数据库·redis·缓存
橘 日向18 小时前
admin二维码字符过长导致显示失败问题
数据库·oracle