SQL错误代码:4025.CONSTRAINT(试图添加用于邮政编码检查的约束)



我对数据库和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(匹配。所以"1234AA";以及";公元前2897年";可以通过,但是";44444A";或";4444AA";不能非常感谢。

引擎:InnoDB

程序:MySQLWorkbench 8.0

您需要将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

相关内容

  • 没有找到相关文章

最新更新