提问人:ndiamond 提问时间:8/17/2023 最后编辑:ndiamond 更新时间:8/17/2023 访问量:92
自定义 MariaDB 警告不会引发,但相同的错误会引发
Custom MariaDB warning doesn't get raised, but identical error does
问:
我正在尝试创建一个自定义警告,该警告可以由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 ;
尝试插入应触发警告的值时,没有任何反应。F.D.,
> INSERT INTO my_table (data) VALUES ('bad data');
Query OK, 1 row affected (0.013 sec)
> SHOW WARNINGS;
Empty set (0.000 sec)
但是,如果我将错误更改为错误(例如,),则使用相同的查询会出现错误:SQLSTATE
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
- 将级别从 2(默认)一直增加到 9
log_warnings
- 在触发器中设置特定值
mysql_errno
帮助将不胜感激。
答:
0赞
Georg Richter
8/17/2023
#1
看起来你遇到了一个错误。 开头为 (warnings) 在存储过程内或外部执行时会引发警告,但不会在触发器内执行,如示例中所示。SIGNAL SQLSTATE
01
MariaDB [test]> SIGNAL SQLSTATE '01000';
Query OK, 0 rows affected, 1 warning (0.000 sec)
MariaDB [test]> DELIMITER $$
MariaDB [test]> CREATE OR REPLACE PROCEDURE p1()
-> BEGIN
-> SIGNAL SQLSTATE '01000';
-> END $$
Query OK, 0 rows affected (0.013 sec)
MariaDB [test]> call p1()$$
Query OK, 0 rows affected, 1 warning (0.000 sec)
我在MariaDB的跟踪系统中提交了一个问题:MDEV-31940
评论