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)
);
相关推荐
冰暮流星9 小时前
sql语句之select语句的基本使用
数据库·sql·mysql
vyuvyucd9 小时前
插件式开发:C++与C#实战指南
java·前端·数据库
少云清9 小时前
【性能测试】3_性能测试基础 _指标
运维·服务器·数据库·性能测试·性能测试指标
+VX:Fegn08959 小时前
计算机毕业设计|基于springboot + vue物流配送中心信息化管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·小程序·课程设计
列御寇10 小时前
MongoDB分片集群——集群组件概述
数据库·mongodb
七夜zippoe10 小时前
领域驱动设计在Python中的实现:从理论到生产级实践
数据库·python·sqlite·ddd·pydantic
小CC吃豆子10 小时前
Qt的信号与槽机制
开发语言·数据库·qt
·云扬·10 小时前
系统与MySQL核心监控指标及操作指南
android·数据库·mysql
七夜zippoe10 小时前
数据库事务隔离级别与Spring传播行为深度解析
java·数据库·spring·mvcc·acid·myslq
VX:Fegn089510 小时前
计算机毕业设计|基于springboot + vue智慧养老院管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计