gpt4 book ai didi

mysql - 是否可以使用正则表达式在 MySQL 中强制执行数据检查

转载 作者:可可西里 更新时间:2023-11-01 06:31:43 25 4
gpt4 key购买 nike

假设我有一个名为电话号码的属性,我想对该字段的条目强制执行某些有效性。我可以为此目的使用正则表达式吗,因为正则表达式在定义约束方面非常灵活。

最佳答案

是的,你可以。 MySQL 支持正则表达式 ( http://dev.mysql.com/doc/refman/5.6/en/regexp.html ) 并且对于数据验证,您应该使用触发器,因为 MySQL 不支持 CHECK 约束(您始终可以移动到 PostgreSQL 作为替代:)。注意!请注意,即使 MySQL 确实具有 CHECK 约束构造,不幸的是 MySQL(到目前为止 5.6)不会根据检查约束验证数据。根据http://dev.mysql.com/doc/refman/5.6/en/create-table.html : "CHECK 子句被解析但被所有存储引擎忽略。"

您可以为电话列添加检查约束:

CREATE TABLE data (
phone varchar(100)
);

DELIMITER $$
CREATE TRIGGER trig_phone_check BEFORE INSERT ON data
FOR EACH ROW
BEGIN
IF (NEW.phone REGEXP '^(\\+?[0-9]{1,4}-)?[0-9]{3,10}$' ) = 0 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT = 'Wroooong!!!';
END IF;
END$$
DELIMITER ;


INSERT INTO data VALUES ('+64-221221442'); -- should be OK
INSERT INTO data VALUES ('+64-22122 WRONG 1442'); -- will fail with the error: #1644 - Wroooong!!!

但是,您不应仅依赖 MySQL(在您的案例中为数据层)进行数据验证。应在应用的所有级别验证数据。

关于mysql - 是否可以使用正则表达式在 MySQL 中强制执行数据检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com