当前位置: 首页 > 工具软件 > sqlcheck > 使用案例 >

SQL学习之check约束

孙志
2023-12-01

参考源

SQL check 约束

SQL check 约束用于限制列中的值的范围

check 约束既可以用于某一列也可以用于某张表:

  1. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值
  2. 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制

示例数据

CREATE DATABASE IF NOT EXISTS hardy_db default character set utf8mb4 collate utf8mb4_0900_ai_ci;

USE hardy_db;

DROP TABLE IF EXISTS lesson;

create table 添加 check 约束

创建表结构时可以使用 check 关键字给表或者字段添加 check 约束

  1. 例如在创建 lession 表时可以给 id 字段加上一个大于 0 的 约束
    MySQL

    CREATE TABLE lesson (
        id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        name varchar(32) default '',
        views int(11) NOT NULL default '0',
        created_at DATETIME,
        CHECK ( id > 0 )
    );
    

    SQL Server / Oracle / MS Access

    CREATE TABLE lesson (
        id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT CHECK ( id>0 ),
        name varchar(32) default '',
        views int(11) NOT NULL default '0',
        created_at DATETIME
    );
    

多个字段添加约束

如果想给一个表中多个字段添加约束,直接在check关键字后的括号内添加,每个约束使用 and连接

CREATE TABLE lesson (
    id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name varchar(32) default '',
    views int(11) NOT NULL default '0',
    created_at DATETIME,
    CHECK ( id >0  AND views >= 0 );
);

给 check 约束命名

CREATE TABLE lesson (
    id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name varchar(32) default '',
    views int(11) NOT NULL default '0',
    created_at DATETIME,
    CONSTRAINT chk_lesson_id CHECK ( id > 0 )
);

alter table 时的 SQL check 约束

ALTER TABLE lesson ADD CHECK (id>0);

命名

ALTER TABLE lesson ADD CONSTRAINT chk_lesson CHECK (id > 0 AND views >= 0);

删除 check 约束

如果想要删除 check 约束,可以使用 alter table ... drop 关键字

SQL Server / Oracle / MS Access

ALTER TABLE lesson DROP CONSTRAINT chk_lesson_id;

MySQL

ALTER TABLE lesson DROP CHECK chk_lesson_id

建议

虽然各个数据库系统都可以添加 check 约束,但不推荐这么做,因为这会影响数据插入和更新的速度

 类似资料: