数据库约束是用于限制表中数据完整性的规则,确保数据的准确性和可靠性。MySQL提供了多种约束类型,通过它们可以强制实施数据完整性规则。
主键是表中唯一标识每行记录的列或列组合,具有以下特性:
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50)
);
外键用于建立两个表之间的关系,确保引用完整性:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
确保列中的所有值都是唯一的:
CREATE TABLE products (
id INT PRIMARY KEY,
product_code VARCHAR(20) UNIQUE
);
强制列不接受NULL值:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
限制列中值的范围:
CREATE TABLE students (
id INT PRIMARY KEY,
age INT CHECK (age >= 18)
);
当插入数据未指定值时,使用默认值:
CREATE TABLE orders (
id INT PRIMARY KEY,
order_date DATE DEFAULT CURRENT_DATE
);
通过约束确保数据符合业务规则,如:
主键和唯一约束会自动创建索引,提高查询效率。
将部分业务规则下沉到数据库层,减少应用代码复杂度。
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column);
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
SET FOREIGN_KEY_CHECKS = 0; -- 禁用
SET FOREIGN_KEY_CHECKS = 1; -- 启用
主键不允许NULL值且一个表只能有一个,唯一键允许NULL值且可以有多个。
会带来一定的性能开销,但在多数情况下数据完整性的收益大于性能损失。
SHOW CREATE TABLE table_name;