Skip to content

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;

注意事项

  1. 主键约束:每个表只能有一个主键约束,但主键可以包含多个列(复合主键)。

  2. 外键约束:外键引用的列必须是目标表的主键或唯一约束列。

  3. 检查约束:不同数据库系统对检查约束的支持程度不同。

  4. 性能考虑:过多的约束可能会影响数据库的性能,特别是在插入和更新操作时。

小结

SQL 约束是确保数据库数据完整性和一致性的重要工具。通过使用适当的约束,可以防止无效数据的插入和更新,提高数据质量。约束可以在创建表时添加,也可以在表创建后通过 ALTER TABLE 语句添加。