智用指南
第二套高阶模板 · 更大气的阅读体验

SQL约束类型详解:让数据更可靠

发布时间:2025-12-09 05:04:55 阅读:323 次

在设计数据库时,经常会遇到用户输入错误、重复提交或者漏填信息的情况。比如一个注册系统,如果允许两个人用同一个邮箱注册,那后续的登录和通知就会乱套。这时候,SQL约束就派上用场了——它像是一道道规则门槛,确保存进数据库的数据是合法、完整且一致的。

主键约束(PRIMARY KEY)

主键用来唯一标识一条记录。比如每个用户都有一个唯一的ID,这个ID不能重复,也不能为空。设置了主键后,数据库会自动拒绝插入重复或NULL值。

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

非空约束(NOT NULL)

有些字段必须填写,比如注册时的手机号。通过NOT NULL约束,可以防止该字段被留空。

CREATE TABLE profiles (
    phone VARCHAR(15) NOT NULL,
    nickname VARCHAR(30)
);

唯一约束(UNIQUE)

和主键似,但允许有多个唯一约束,并且可以包含一个NULL值(不同数据库处理方式略有差异)。常用于限制邮箱、身份证号这类不能重复的信息。

CREATE TABLE accounts (
    email VARCHAR(100) UNIQUE,
    username VARCHAR(50)
);

外键约束(FOREIGN KEY)

用来建立表与表之间的关联。比如订单表中的用户ID必须存在于用户表中,否则就是无效订单。外键能防止“孤儿记录”的出现。

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

检查约束(CHECK)

设定字段的取值范围。例如年龄不能为负数,性别只能是“男”或“女”。CHECK约束会在写入时验证条件是否满足。

CREATE TABLE students (
    age INT CHECK (age >= 0),
    gender VARCHAR(10) CHECK (gender IN ('男', '女'))
);

默认值约束(DEFAULT)

当没有提供值时,自动填充默认内容。比如用户注册时未选择城市,默认设为“未知”,避免字段为空带来的处理麻烦。

CREATE TABLE logs (
    login_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    location VARCHAR(50) DEFAULT '未知'
);

这些约束不是可有可无的装饰,而是保障数据质量的核心机制。实际开发中,很多人图省事跳过约束设置,结果后期查数据对不上、程序报错不断。提前加好约束,等于给数据库穿上防弹衣,哪怕前端出点小问题,底层数​​据依然稳得住。