Appearance
SQL 约束
SQL 约束用于限制表中数据的类型,确保数据的完整性和一致性。约束可以在创建表时添加,也可以在表创建后通过 ALTER TABLE 语句添加。
常用约束类型
| 约束名称 | 描述 |
|---|---|
| NOT NULL | 确保列不能为 NULL |
| UNIQUE | 确保列中的所有值都是唯一的 |
| PRIMARY KEY | 主键约束,结合了 NOT NULL 和 UNIQUE |
| FOREIGN KEY | 外键约束,用于建立表之间的关系 |
| CHECK | 检查约束,用于限制列的值的范围 |
| DEFAULT | 默认约束,为列设置默认值 |
约束的添加方式
1. 创建表时添加约束
sql
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
...
);2. 表创建后添加约束
sql
ALTER TABLE table_name
ADD constraint_name constraint_type (column_list);示例
示例 1:创建表时添加各种约束
sql
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
student_id VARCHAR(20) UNIQUE NOT NULL,
age INT CHECK (age >= 0 AND age <= 100),
grade VARCHAR(20) DEFAULT '高一',
gender VARCHAR(10) CHECK (gender IN ('男', '女', '未知'))
);
CREATE TABLE scores (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id VARCHAR(20) NOT NULL,
subject VARCHAR(50) NOT NULL,
score DECIMAL(5,2) NOT NULL,
FOREIGN KEY (student_id) REFERENCES students(student_id)
);示例 2:表创建后添加约束
sql
-- 创建表
CREATE TABLE students (
id INT,
name VARCHAR(50),
age INT,
grade VARCHAR(20)
);
-- 添加主键约束
ALTER TABLE students
ADD PRIMARY KEY (id);
-- 添加非空约束
ALTER TABLE students
MODIFY name VARCHAR(50) NOT NULL;
-- 添加检查约束
ALTER TABLE students
ADD CHECK (age >= 0 AND age <= 100);
-- 添加默认约束
ALTER TABLE students
ALTER grade SET DEFAULT '高一';约束的删除
删除主键约束
sql
ALTER TABLE table_name
DROP PRIMARY KEY;删除外键约束
sql
ALTER TABLE table_name
DROP FOREIGN KEY constraint_name;删除检查约束
sql
ALTER TABLE table_name
DROP CHECK constraint_name;删除唯一约束
sql
ALTER TABLE table_name
DROP UNIQUE constraint_name;删除默认约束
sql
ALTER TABLE table_name
ALTER column_name DROP DEFAULT;注意事项
主键约束:每个表只能有一个主键约束,但主键可以包含多个列(复合主键)。
外键约束:外键引用的列必须是目标表的主键或唯一约束列。
检查约束:不同数据库系统对检查约束的支持程度不同。
性能考虑:过多的约束可能会影响数据库的性能,特别是在插入和更新操作时。
小结
SQL 约束是确保数据库数据完整性和一致性的重要工具。通过使用适当的约束,可以防止无效数据的插入和更新,提高数据质量。约束可以在创建表时添加,也可以在表创建后通过 ALTER TABLE 语句添加。