【问题标题】:SQL Error code: 4025. CONSTRAINT (trying to add a constraint for zip code check)SQL 错误代码:4025。CONSTRAINT(尝试为邮政编码检查添加约束)
【发布时间】:2022-01-03 17:04:05
【问题描述】:

我对数据库和 SQL 有点陌生,所以我希望能在我的问题上得到一些帮助。我正在尝试在现有表“订单”上添加荷兰邮政编码的验证检查。我要检查的列称为“Zip”varchar(7)。我使用了以下查询,它一直给我一个错误 4025:

ALTER TABLE `order`
ADD CONSTRAINT CK_zip
CHECK (Zip LIKE '[0-9][0-9][0-9][0-9] [a-z][a-z]');

我也尝试为相同的输入字段创建触发器,但这也不起作用。我试图添加的触发器:

DELIMITER // 
CREATE TRIGGER valid_zip
    BEFORE INSERT ON order
    FOR EACH ROW 
       BEGIN 
         IF NEW.Zip NOT LIKE '#### [a-z][a-z]' THEN 
          SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'No valid zip'; 
         END IF; 
       END; 
 // 
DELIMITER ;

我显然做错了什么,但我不知道是什么。我想在应该匹配荷兰邮政编码格式 (0000 XX) 的输入字段上添加验证。所以“1234 AA”和“2897 BC”可以通过,但“44444 A”或“4444AA”不能。谢谢!

引擎:InnoDB

程序:MySQLWorkbench 8.0

【问题讨论】:

    标签: sql validation constraints mysql-workbench


    【解决方案1】:

    您需要将regexp_like 约束为regexp_LIKE (Zip,'[0-9][0-9][0-9][0-9] [a-z][a-z]') 而不是Zip LIKE '[0-9][0-9][0-9][0-9] [a-z][a-z]'

    创建表语句:

     create table `order` (zip varchar(7))
    

    检查约束

     ALTER TABLE `order`
     ADD CONSTRAINT CK_zip
     CHECK ( regexp_LIKE (Zip,'[0-9][0-9][0-9][0-9] [a-z][a-z]'));
    

    插入语句:

     insert into `order` values('1111 aa');
     insert into `order` values('1111aa');
     insert into `order` values('1111 a');
    

    order中选择

     select * from `order`
    

    输出:

    zip
    1111 aa

    db小提琴here

    【讨论】:

    • 不错。不过,我们可以稍微收紧正则表达式模式。 ALTER TABLE order ADD CHECK (REGEXP_LIKE(content, '^[0-9]{4} [a-zA-Z]{2}$'))
    • 也祝你好运!并感谢您非常明确的回答!但是,我不能以某种方式在 MySQL 中使用 regexp_LIKE。我得到以下错误:错误代码:1901。函数或表达式'REGEXP_LIKE()'不能在Ck_zip的CHECK子句中使用是否需要使用regexp_like的特殊条件?
    猜你喜欢
    • 2019-02-25
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2015-01-22
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多