我试图创建一个自定义警告,可以由MariaDB数据库中的触发器引发,但由于某种原因,我无法显示它。相关代码(简化和模糊)如下:
CREATE TABLE my_table (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
data VARCHAR(255),
);
DELIMITER //
CREATE TRIGGER warn_bad_cause
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF (NEW.data LIKE 'bad data')
THEN
SIGNAL SQLSTATE '01000'
SET MESSAGE_TEXT = 'bad data';
END IF;
END //
DELIMITER ;
尝试插入应触发警告的值时,不会发生任何情况。例如,在一个示例中,
> INSERT INTO my_table (data) VALUES ('bad data');
Query OK, 1 row affected (0.013 sec)
> SHOW WARNINGS;
Empty set (0.000 sec)
但是,如果我将SQLSTATE
更改为error(例如,45000
),我会使用相同的查询得到一个错误:
> INSERT INTO my_table (data) VALUES ('bad data');
Query OK, 1 row affected (0.013 sec)
ERROR 1644 (45000): bad data
Error (Code 1644): bad data
> SHOW WARNINGS;
+-------+------+----------+
| Level | Code | Message |
+-------+------+----------+
| Error | 1644 | bad data |
+-------+------+----------+
我尝试过的事情:
\W
显示警告- 使用
sql_errlog
插件检查日志 - 将
log_warnings
级别从2(默认值)一直增加到9 - 在触发器中设置特定的
mysql_errno
值
我们将不胜感激。
1条答案
按热度按时间ej83mcc01#
看起来你好像碰到了一只虫子。以
01
(warnings)开头的SIGNAL SQLSTATE
在存储过程内部或外部执行时引发警告,但不会在触发器内部引发警告,如示例所示。我在MariaDB的跟踪系统中提交了一个问题:MDEV-31940