云计算百科
云计算领域专业知识百科平台

SQL约束:数据完整性的守护者

在SQL中,约束(Constraints) 是作用于数据库表字段上的规则,用于强制保证数据的完整性、准确性和一致性。当插入、更新或删除数据时,约束会自动验证操作是否符合规则,若违反则拒绝执行。

以下是SQL中常见的约束类型及其作用:


📌 1. PRIMARY KEY(主键约束)

  • 作用:唯一标识表中的每一条记录(类似身份证号)。
  • 特点:
    • 唯一性:值不可重复。
    • 非空性:值不可为 NULL。
    • 一个表只能有一个主键(可由单列或多列组合)。

CREATE TABLE Users (
id INT PRIMARY KEY, — 单列主键
name VARCHAR(50)
);

— 多列组合主键
CREATE TABLE Orders (
order_id INT,
product_id INT,
PRIMARY KEY (order_id, product_id)
);


📌 2. FOREIGN KEY(外键约束)

  • 作用:确保表间数据关联的完整性(如订单必须属于存在的用户)。
  • 特点:
    • 指向另一张表的主键或唯一键。
    • 可定义级联操作(如 ON DELETE CASCADE:主表删除时,自动删除从表关联数据)。

CREATE TABLE Orders (
order_id INT PRIMARY KEY,
user_id INT,
— 关联Users表的主键id
FOREIGN KEY (user_id) REFERENCES Users(id)
ON DELETE CASCADE — 用户删除时,其订单自动删除
);


📌 3. UNIQUE(唯一约束)

  • 作用:确保字段值在表内唯一(允许空值)。
  • 特点:
    • 一个表可有多个唯一约束。
    • 与主键区别:允许 NULL 值(主键不允许)。

CREATE TABLE Employees (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE — 邮箱必须唯一
);


📌 4. NOT NULL(非空约束)

  • 作用:强制字段不允许存入 NULL 值(必须提供有效数据)。
  • 常见场景:关键字段如姓名、订单号等。

CREATE TABLE Products (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL — 产品名不能为空
);


📌 5. CHECK(检查约束)

  • 作用:自定义条件校验字段值(如年龄范围、数值正负)。

CREATE TABLE Students (
id INT PRIMARY KEY,
age INT CHECK (age >= 18), — 年龄必须≥18
grade CHAR(1) CHECK (grade IN ('A','B','C')) — 等级只能是A,B,C
);


📌 6. DEFAULT(默认值约束)

  • 作用:当插入数据未指定字段值时,自动填充预设值。

CREATE TABLE Orders (
id INT PRIMARY KEY,
order_date DATE DEFAULT CURRENT_DATE — 未指定日期时自动用当前日期
);


⚠️ 约束的注意事项

  • 命名约束:显式命名便于维护(否则数据库自动生成随机名)。CREATE TABLE Users (
    id INT,
    CONSTRAINT pk_users PRIMARY KEY (id) — 命名主键约束
    );

  • 修改约束:可通过 ALTER TABLE 增删约束。ALTER TABLE Employees ADD CONSTRAINT chk_salary CHECK (salary > 0);
    ALTER TABLE Employees DROP CONSTRAINT chk_salary;

  • 性能影响:外键和唯一约束会自动创建索引,可能影响写入速度,但提升查询效率。

  • 💡 应用场景示例

    约束类型实际应用场景
    PRIMARY KEY 用户ID、订单号等唯一标识字段
    FOREIGN KEY 订单关联用户ID、评论关联文章ID
    UNIQUE 用户邮箱、手机号等不可重复的业务字段
    NOT NULL 必填项(如用户名、创建时间)
    CHECK 价格≥0、性别只能是’M’或’F’等逻辑校验
    DEFAULT 自动填充创建时间、状态默认值

    合理使用约束可避免脏数据(如无效外键、重复订单号),是数据库设计的核心环节!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » SQL约束:数据完整性的守护者
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!