【问题标题】:how to Allow only alpha numeric values in mysql如何在mysql中只允许字母数字值
【发布时间】: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


【解决方案1】:

假设是 MySQL >=8.0.16

check(EmpId regexp '^[a-z]{2}[0-9]{3,5}$')

【讨论】:

  • 数值也在插入
  • 因为你使用的是低于 8.0.16 的版本,所以它不会工作
  • ,我已经升级到 8.0.17 它的工作,如何为此添加错误消息请让我知道 Empid 应该是 ab123/ab1234/a12345 格式
  • 有点长,需要使用存储过程来捕捉错误。可能还有其他解决方案,但您不能只使用查询。那么你需要在哪里显示这些错误?如果它在应用程序端,您可以在那里进行。
猜你喜欢
  • 1970-01-01
  • 2014-04-11
  • 2011-11-24
  • 1970-01-01
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2016-10-07
相关资源
最近更新 更多