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)
);
相关推荐
P***84392 小时前
【MySQL】C# 连接MySQL
数据库·mysql·c#
8***f3952 小时前
SQL中的REGEXP正则表达式使用指南
数据库·sql·正则表达式
o***74172 小时前
MySQL root用户密码忘记怎么办(Reset root account password)
数据库·mysql·adb
M***Z2102 小时前
【SQL技术】不同数据库引擎 SQL 优化方案剖析
数据库·sql
l***21782 小时前
MySQL--》理解锁机制中的并发控制与优化策略
数据库·mysql·oracle
chenyuhao20242 小时前
MySQL索引特性
开发语言·数据库·c++·后端·mysql
5***r9353 小时前
SQL实现md5加密方法
数据库·sql
i***77803 小时前
mysql 迁移达梦数据库出现的 sql 语法问题 以及迁移方案
数据库·sql·mysql
5***E6853 小时前
mysql重置root密码(适用于5.7和8.0)
数据库·mysql·adb
q***69773 小时前
使用 Qt 插件和 SQLCipher 实现 SQLite 数据库加密与解密
数据库·qt·sqlite