【发布时间】:2017-03-05 20:44:48
【问题描述】:
首先,我正在使用的版本:
$ mysql --version
mysql Ver 15.1 Distrib 10.0.29-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
除了最后的声明之外,以下所有内容都可以正常工作:
CREATE DATABASE db1; USE db1;
CREATE TABLE tb1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
word VARCHAR(50) NOT NULL);
INSERT INTO tb1 (word) VALUES ('foo');
DELETE FROM tb1 WHERE word='foo';
DELIMITER $$
CREATE TRIGGER before_word_insert BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN
SET NEW.word=TRIM(NEW.word);
IF (NEW.word REGEXP "^\w+$" = 0) THEN
SIGNAL SQLSTATE '12345' SET MESSAGE_TEXT = 'Invalid word';
END IF;
END$$
DELIMITER ;
INSERT INTO tb1 (word) VALUES ('foo');
导致:
ERROR 1644 (12345): Invalid word
这令人费解,因为与 Perl 兼容的正则表达式 \w+ 肯定应该匹配字符串 foo。因此,我希望最终的 SQL 语句能够正确执行。
那么,是什么导致了这个错误?
【问题讨论】:
-
使用什么 api 将此
CREATE提供给服务器?是否会消耗反斜杠? -
@RickJames,只是
mysqlCLI 实用程序。
标签: mysql sql database mariadb