我对数据库和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 |