热门课程 - 发现知识之美

MySQL 数据库

作者: 蒋老师 更新: 2025-12-08 阅读: 难度: 高级
学习工具

. 数据约束与完整性

数据约束确保数据库中的数据准确性和一致性。

主键约束

主键定义
-- 创建表时定义主键 CREATE TABLE users ( user_id INT PRIMARY KEY, username VARCHAR(50) ); -- 复合主键 CREATE TABLE course_registration ( student_id INT, course_id INT, reg_date DATE, PRIMARY KEY (student_id, course_id) ); -- 添加主键约束 ALTER TABLE students ADD PRIMARY KEY (id); -- 删除主键约束 ALTER TABLE students DROP PRIMARY KEY;

外键约束

外键示例
-- 创建部门表 CREATE TABLE departments ( dept_id INT PRIMARY KEY, dept_name VARCHAR(100) ); -- 创建员工表,添加外键 CREATE TABLE employees ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50), dept_id INT, FOREIGN KEY (dept_id) REFERENCES departments(dept_id) ON DELETE CASCADE -- 级联删除 ON UPDATE CASCADE -- 级联更新 ); -- 外键操作选项 -- ON DELETE CASCADE 删除主表记录时,子表相关记录也删除 -- ON DELETE SET NULL 删除主表记录时,子表外键设为NULL -- ON DELETE RESTRICT 如果子表有相关记录,阻止删除主表记录 -- ON DELETE NO ACTION 与RESTRICT类似

其他约束类型

完整性约束
-- NOT NULL约束 CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(100) NOT NULL, price DECIMAL(10,2) NOT NULL ); -- UNIQUE约束 CREATE TABLE users ( id INT PRIMARY KEY, email VARCHAR(100) UNIQUE, username VARCHAR(50) UNIQUE ); -- CHECK约束(MySQL 8.0+支持) CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50), age INT CHECK (age >= 18 AND age <= 65), salary DECIMAL(10,2) CHECK (salary > 0), gender VARCHAR(10) CHECK (gender IN ('男', '女', '其他')) ); -- DEFAULT约束 CREATE TABLE orders ( order_id INT PRIMARY KEY, order_date DATE DEFAULT (CURRENT_DATE), status VARCHAR(20) DEFAULT 'pending', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );

约束管理

查看和修改约束
-- 查看表约束 SHOW CREATE TABLE students; -- 添加约束到现有表 ALTER TABLE students ADD CONSTRAINT chk_age CHECK (age >= 0 AND age <= 120); -- 添加唯一约束 ALTER TABLE students ADD CONSTRAINT uk_email UNIQUE (email); -- 添加外键约束 ALTER TABLE employees ADD CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(dept_id); -- 删除约束 ALTER TABLE students DROP CONSTRAINT chk_age; ALTER TABLE students DROP INDEX uk_email;
提示: 这是一个重要的概念,需要特别注意理解和掌握。
注意: 这是一个常见的错误点,请避免犯同样的错误。

评论

登录 后发表评论