欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > MySQL:表的约束

MySQL:表的约束

2025/4/10 5:14:39 来源:https://blog.csdn.net/lyy42995004/article/details/147009103  浏览:    关键词:MySQL:表的约束

非空约束

  • 确保列的值不能为空。
CREATE TABLE products (id INT PRIMARY KEY,name VARCHAR(100) NOT NULL,  -- 名称不能为空price DECIMAL(10,2) NOT NULL  -- 价格不能为空
);

应用

  • 用户信息表:用户名、密码加非空约束,确保系统正常识别和验证用户。
  • 商品信息表:商品名称、价格加非空约束,保证商品信息完整。

默认值约束

  • 在插入数据时,如果未指定该列的值,则使用默认值。

  • DEFAULT 只能用于非主键列

CREATE TABLE orders (order_id INT PRIMARY KEY,status VARCHAR(20) DEFAULT 'pending',  -- 默认状态为 'pending'created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  -- 默认当前时间
);# 插入
INSERT INTO orders (order_id) VALUES (1); -- `status` 自动填充 'pending'

应用

  • 订单管理系统:订单状态默认设为 ‘pending’,便于统一管理新订单。
  • 日志记录表:记录创建时间默认用 CURRENT_TIMESTAMP,保证记录及时准确。

主键约束

  • 唯一标识表中的每一行记录,不能重复,不能为NULL。

  • 每个表只能有一个主键。

  • 一个或多个列组成(复合主键)。

  • 默认自动创建唯一索引

单列主键

CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50)
);
# 两者等价
CREATE TABLE users (id INT,name VARCHAR(50),PRIMARY KEY (id)   -- 单独定义主键
);

复合主键

CREATE TABLE orders (order_id INT,user_id INT,PRIMARY KEY (order_id, user_id)  -- 组合唯一标识
);

应用

  • 用户表:用户 ID 作主键,快速准确管理用户信息,避免重复混淆。
  • 订单表:订单 ID 作主键,处理订单操作时提高效率和准确性。

自增约束

  • 让某列的值自动增长,常用于主键

  • 只能用于 INTBIGINT 类型的列。

  • 默认从 1 开始,每次递增 1

  • 只能有一个 AUTO_INCREMENT 列。

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50)
);INSERT INTO users (name) VALUES ('Alice'), ('Bob');	-- Alice id 1, Bob id 2

应用

  • 用户注册系统:用户 ID 设自增约束,自动分配唯一连续 ID,方便管理。
  • 论坛帖子表:帖子 ID 用自增约束,自动生成递增 ID,便于排序查询。

唯一约束

  • 确保列的值唯一,但允许NULL值(NULL不认为是重复)。

  • 一个表可以有多个 UNIQUE 约束。

  • UNIQUE 可以在单列多列组合上定义。

单列唯一

CREATE TABLE employees (emp_id INT UNIQUE,  -- emp_id 不能重复email VARCHAR(100) UNIQUE  -- email 不能重复
);

复合唯一

CREATE TABLE course_enrollment (student_id INT,course_id INT,UNIQUE (student_id, course_id)  -- 确保一个学生只能选同一课程一次
);

应用

  • 员工信息表:员工工号、邮箱加唯一约束,避免数据冲突。
  • 课程选课表:学生 ID 和课程 ID 组合加唯一约束,防止重复选课。

外键约束

  • 确保一个表中的数据引用另一个表中存在的值。
  • 保持数据的引用完整性。
  • 被引用的列必须是主键或唯一键。

基本外键

CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50)
);CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)  -- 约束user_id必须是users表的id
);

级联操作

级联操作说明
CASCADE级联更新或删除
SET NULL关联数据变更时,外键列设为NULL
RESTRICT阻止删除/更新
CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE
);
  • users 表中 id 被删除时,orders 表中 user_id 相关的记录也会被删除。

应用

  • 订单与用户系统:订单表用户 ID 作外键关联用户表,保证订单对应有效用户,方便查询统计。
  • 图书管理系统:借阅记录图书 ID、读者 ID 作外键,确保借阅信息有效。

检查约束

  • MySQL 8.0+ 支持 CHECK 约束。

  • 确保列的值符合特定条件。

CREATE TABLE students (id INT PRIMARY KEY,age INT CHECK (age >= 18)  -- 限制年龄不能小于18岁
);

应用

  • 学生信息表:学生年龄加检查约束(≥18 岁)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词