【发布时间】:2019-07-25 07:26:45
【问题描述】:
我有一张桌子
CREATE TABLE table_name
(
EmpId VARCHAR(50),
Name VARCHAR(100)
)
如何将 EmpId 列限制为由两个字母后跟 3-5 位数字组成?以下是所有有效值的示例:
ac236, ak2356, av23695, ak365
我尝试使用以下检查约束:
ALTER TABLE table_name
ADD CONSTRAINT ck_table_name CHECK (EmpId NOT LIKE'%[^a-zA-Z0-9 ]%')
但是,它允许所有字母和数字的组合,例如“23”和“时尚”:
INSERT INTO table_name
VALUES
('23', 'Test 2'),
('fabs', 'Test 2');
如果值违反格式,我希望查询失败并打印错误消息。例如,如果 'na23' 作为 EmpID 插入,MySQL 可以说:
Empid 应该是 ab123/ab1234/a12345 格式
最初,我使用的是 MySQL 5.7.11-0ubuntu6-log(原来是 doesn't support CHECK constraints),但已升级到 MySQL 8.0.17。
【问题讨论】:
-
你用的是什么版本的mysql?
-
5.7.11-0ubuntu6-log
-
'在 MySQL 8.0.16 之前,CREATE TABLE 只允许以下有限版本的 table CHECK 约束语法,它被解析和忽略:' - dev.mysql.com/doc/refman/8.0/en/… 。在您的前端或触发器中执行此检查。
标签: mysql