我正在尝试使用mysql-trigger验证插入。 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);
有人知道我在这里想念什么吗?
答案 0 :(得分:1)
您能以这种方式检查
IF NEW.col1 REGEXP '^[0-9]+$' AND NEW.col1 NOT REGEXP '\n' THEN
with 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
答案 1 :(得分:1)
另一种选择是搜索不是数字的任何内容,如果任何字符不是数字,则返回1:REGEXP '[^[:digit:]]'
因此IF
子句将是
IF (NEW.col1 REGEXP '[^[:digit:]]') = 1 THEN ...
如果您不想使用字符类,当然可以写[^0-9]
而不是[:digit:]