我正在尝试使用mysql触发器验证插入。col1中的插入应该是数字的。首先将col1定义为整数并不是一个选项。但是,如果结尾有换行符,则验证失败。
这是桌子
CREATE TABLE testTable(col1 varchar(20), col2 int);在这里,触发器验证器
DELIMITER $$
CREATE TRIGGER check_numeric BEFORE INSERT ON testTable
FOR EACH ROW
BEGIN
IF (NEW.col1 REGEXP '^[0-9]+$') = 0 THEN
SIGNAL SQLSTATE '12345' SET MESSAGE_TEXT='non-numerical';
END IF;
END $$如果我试图在末尾插入一个包含换行符的字符串,这将通过验证,尽管在我看来它不应该是数字字符。
INSERT INTO testTable values('323423\n', 12);有人知道我在这里错过了什么吗?
发布于 2019-01-26 15:29:44
另一个选项是搜索任何不是数字的内容,如果任何字符不是数字,这将返回1:REGEXP '[^[:digit:]]'
所以IF条款应该是
IF (NEW.col1 REGEXP '[^[:digit:]]') = 1 THEN ...当然,如果不想使用字符类,则可以编写[^0-9]而不是[:digit:]
发布于 2019-01-26 15:16:13
你能这样办理登机手续吗?
IF NEW.col1 REGEXP '^[0-9]+$' AND NEW.col1 NOT REGEXP '\n' THENwith w as
(select '1234' c1 from dual union all
select '1234\n' from dual)
select * from w
where c1 REGEXP '^[0-9]+$' AND c1 NOT REGEXP "\n";结果:1234
https://stackoverflow.com/questions/54379629
复制相似问题