是否可以使用正则表达式在 MySQL 中强制执行数据检查?
mysqlmysqli database
是的,可以使用正则表达式在 MySQL 中强制执行数据检查。首先,您需要创建一个表。之后,您需要在插入表之前创建一个触发器。在这里,我们将检查电话号码格式。
创建表的查询如下
mysql> create table enforceDataUsingRegularExpression - > ( - > yourPhoneNumber varchar(60) - > ); Query OK, 0 rows affected (0.59 sec)
创建触发器的查询如下
mysql> DELIMITER // mysql> CREATE TRIGGER enforce_phone_check BEFORE INSERT ON enforceDataUsingRegularExpression - > FOR EACH ROW - > BEGIN - > IF (NEW.yourPhoneNumber REGEXP '^(\+?[0-9]{1,4}-)?[0-9]{3,10}$' ) = 0 THEN - > SIGNAL SQLSTATE '33455' - > SET MESSAGE_TEXT = 'Your Phone Number is incorrect'; - > END IF; - > END // Query OK, 0 rows affected (0.16 sec) mysql> DELIMITER ;
现在查看在表中插入记录时的错误,以使用正则表达式强制在 MySQL 中进行数据检查
mysql> insert into enforceDataUsingRegularExpression values("+55242-64576"); ERROR 1644 (33455): Your Phone Number is incorrect mysql> insert into enforceDataUsingRegularExpression values("+76-WD1232221"); ERROR 1644 (33455): Your Phone Number is incorrect Now inserting the correct data i.e. the correct phone, which is as follows: mysql> insert into enforceDataUsingRegularExpression values("+55-1232221"); Query OK, 1 row affected (0.13 sec)
使用 select 语句显示表中的所有记录。
查询如下
mysql> select *from enforceDataUsingRegularExpression;
以下是输出 −
+-----------------+ | yourPhoneNumber | +-----------------+ | +55-1232221 | +-----------------+ 1 row in set (0.00 sec)