主键约束确保每行数据唯一且非空,一个表仅能有一个主键,可由单列或多列组成,自动创建唯一索引;例如id int PRIMARY KEY。
在 mysql 中,约束条件是用来限制表中数据的规则,确保数据的准确性、一致性和完整性。它们在创建表(CREATE table)或修改表(ALTER TABLE)时定义,防止不符合规范的数据被插入、更新或删除。
1. 主键约束(PRIMARY KEY)
主键用于唯一标识表中的每一行数据,不能为 NULL,且必须唯一。
- 一个表只能有一个主键
- 可以是单个字段,也可以是多个字段的组合(复合主键)
- 自动创建唯一索引,提升查询效率
例如:
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
2. 唯一约束(UNIQUE)
确保某列或多列的值在整个表中是唯一的,但允许有 NULL 值(NULL 可以出现多次)。
- 一个表可以有多个唯一约束
- 常用于邮箱、身份证号等需要唯一性的字段
例如:
CREATE TABLE users (email VARCHAR(100) UNIQUE);
3. 非空约束(NOT NULL)
规定某列不能存储 NULL 值,必须提供有效数据。
- 常与默认值(default)配合使用
- 避免数据缺失导致逻辑错误
例如:
CREATE TABLE users (name VARCHAR(50) NOT NULL);
4. 默认值约束(DEFAULT)
当插入数据时未指定某列的值,系统会自动使用默认值填充。
- 适用于创建时间、状态字段等有固定初始值的场景
例如:
CREATE TABLE orders (status VARCHAR(20) DEFAULT ‘pending’);
5. 外键约束(FOREIGN KEY)
用于建立两个表之间的关联,确保引用的值在被引用表中存在,维护数据的一致性。
- 外键指向另一个表的主键或唯一键
- 防止非法数据插入,比如订单中的用户 ID 必须存在于用户表中
- 可设置级联操作(CAScadE),如删除用户时自动删除其订单
例如:
CREATE TABLE orders (user_id INT, FOREIGN KEY (user_id) REFERENCES users(id));
6. 检查约束(CHECK)
定义某列的取值范围或条件,只有满足条件的数据才能插入或更新。
- MySQL 8.0+ 支持 CHECK 约束(早期版本会解析但不执行)
- 可用于限制年龄、价格等数值范围
例如:
CREATE TABLE students (age INT CHECK (age >= 0 AND age
基本上就这些。合理使用约束能减少应用层的数据校验压力,提升数据库的可靠性。虽然约束会带来少量性能开销,但在大多数场景下,数据完整性比这点性能更重要。
评论(已关闭)
评论已关闭