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)
);
相关推荐
l1t8 小时前
DeepSeek总结的 pg_regresql插件:真正可移植的 PostgreSQL 统计信息
数据库·postgresql
oradh8 小时前
Oracle 11.2.0.1版本升级至11.2.0.4_单机环境
数据库·oracle·oracle11g·oracle升级
l1t8 小时前
用docker安装测试crate数据库
数据库·docker·容器·cratedb
anzhxu8 小时前
QT数据库(三):QSqlQuery使用
数据库·qt·oracle
身如柳絮随风扬8 小时前
MySQL核心知识
数据库·mysql
德彪稳坐倒骑驴8 小时前
Oracle 11g安装
数据库·oracle
韩立学长8 小时前
Springboot校园跑腿业务系统0b7amk02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
阿贵---8 小时前
使用XGBoost赢得Kaggle比赛
jvm·数据库·python
想七想八不如114088 小时前
数据库--样题复习
数据库·sql·oracle
551只玄猫8 小时前
【数据库原理 实验报告1】创建和管理数据库
数据库·sql·学习·mysql·课程设计·实验报告·数据库原理