SQL中CHECK约束怎么建?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中CHECK约束怎么建?相关的知识,希望对你有一定的参考价值。

让检查插入的是英文

现在要说的是在列这一层次过滤的基于表定义之前就规范好的 CHECK 约束。(mysql 版本 >= 8.0.16)

    mysql> create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0));

    Query OK, 0 rows affected (0.03 sec)

    mysql> create table f2 (r1 int constraint tb_f2_r1_chk1 check (mod(r1,3)=0) not enforced);

    Query OK, 0 rows affected (0.02 sec)

    这里 CHECK 约束的相关限制如下:

    1. constraint 名字在每个数据库中唯一。

    也就是说单个数据库里不存在相同的两个 constraint,如果不定义,系统自动生成一个唯一的约束名字。

    2. check 约束针对语句 insert/update/replace/load data/load xml 生效;针对对应的 ignore 语句失效。

    3. 并非每个函数都可以使用,比如函数结果不确定的:NOW(),CONNECTION_ID(),CURRENT_USER()。

    4. 不适用于存储过程和存储函数。

    5. 系统变量不适用。

    6. 子查询不适用。

    7. 外键动作(比如 ON UPDATE, ON DELETE) 不适用。

    8. enforced 默认启用,如果单独加上 not enforced ,check 约束失效。

参考技术A 展开表
里面有个约束,右键添加约束
可以
或者用语句
alter
table
表名
--要往哪个表添加
add
constraint
约束名
check(约束)
约束填写
可以是字段名>0
约束该字段的值必须大于0
等等等等。
约束名
check一般为ck_表名_字段名
只是一个命名规则
可以不遵循
参考技术B use
数据库名
go
alter
表名
add
constrant
ck_列名
check(len(列名)
between
1
and
99)
在查询分析器中输入这段代码就可以了
参考技术C 下例显示对输入到 employee 表的 emp_id 列中的字符数据具有模式限制的命名约束。

CONSTRAINT CK_emp_id CHECK (emp_id LIKE
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' OR
emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]')

下例指定 pub_id 必须在特定的列表中或遵循给定的模式。此约束用于 publishers 表中的 pub_id 列。

CHECK (pub_id IN ('1389', '0736', '0877', '1622', '1756')
OR pub_id LIKE '99[0-9][0-9]')本回答被提问者采纳
参考技术D alter
table
face
alter
columns
ttype
varchar(4)
--改变数据类型为可变普通字符串型
alter
table
face
add
constraint
mycheck
check(ttype
in('帅哥','靓女'))

以上是关于SQL中CHECK约束怎么建?的主要内容,如果未能解决你的问题,请参考以下文章

sql设置check约束数据不能为中文

要SQL Server 中约束字段LoginName 只能为英文字符,check 语句怎么写?哪位高手指点一下,

如何设置 SQL 中一个属性check约束值只能是0或者1

mysql check约束只能输入1到8怎么写?

SQL Server创建 学号 性别 课程编号 check约束 主键约束 UNIQUE约束

如何在 Informix 中创建 CHECK 约束?