存储过程内创建异常处理机制-自动检测错误类型并且用表记录.(详细请进贴)

Main_csdn_String 2018-03-12 04:56:37
DROP TRIGGER if EXISTS qweqwe; 
DROP TABLE if EXISTS tbl_eeeeeee;
DROP TABLE IF EXISTS strud_name;
CREATE TABLE strud_name (
`id` int(11) NOT NULL,
`class` int(11) NOT NULL,
`name` varchar(5) NOT NULL,
PRIMARY KEY (`id`)
);

CREATE TABLE tbl_eeeeeee(
`uuid` int(11) NOT NULL AUTO_INCREMENT COMMENT '从数据库主键id',
`error` varchar(10) NOT NULL COMMENT '错误代码',
`report_time` datetime NOT NULL COMMENT '异常生成时间',
`rec_status` varchar(10) NOT NULL COMMENT '异常生成状态',
`disposechart` varchar(20) NOT NULL COMMENT '异常生成表',
`anomalydomain` varchar(20) NOT NULL COMMENT '异常告警域',
PRIMARY KEY (`uuid`)
);

DELIMITER $$
CREATE TRIGGER qweqwe
before INSERT ON strud_name FOR EACH ROW
BEGIN
DECLARE code CHAR(5) DEFAULT '00000';
DECLARE msg TEXT;
DECLARE rows INT;
DECLARE result TEXT;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;
END;
IF code = '00000' THEN
-- 数据插入成功 记录这条记录
INSERT INTO tbl_eeeeeee(error,report_time,rec_status,disposechart,anomalydomain)VALUES('00000',NOW(),'OK','异常生成表','异常告警域');
ELSE
-- 可是数据插入失败,没有记录这条记录。
INSERT INTO tbl_eeeeeee(error,report_time,rec_status,disposechart,anomalydomain)VALUES('66666',NOW(),'no','异常生成表','异常告警域');
END IF;
insert into test.strud_name (id,class,name)VALUES(new.id,new.class,new.name);
END
$$
DELIMITER;

-- 重复插入第二次数据的时候会提示错误 可sql是先执行触发器 后实现sql语句
insert into strud_name (id,class,name)VALUES(1,2,'123');


select * from strud_name;
select * from tbl_eeeeeee;


以上的代码,可以直接在电脑上跑,看客如果想了解的话 也可以一起了解下mysql触发器的异常机制。

我现在遇到的问题在于我跑第一次的时候,会成功的执行00000参数 并且插入成功数据

使用的是before 触发器-等于是说先执行这个触发器,判断是否有错误,然后再进行数据的插入

可是在测试的时候-如果插入重复的id - 提示错误后,没有记录下来这个错误的信息。

参考内容:https://dev.mysql.com/doc/refman/5.7/en/get-diagnostics.html

问题重点是-增删改数据库的时候,我们提交sql 在数据库中经历了什么? 而我这儿为什么会提示插入数据库错误的情况下,触发器没有记录下来我插入的错误到表中
...全文
602 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Main_csdn_String 2018-03-19
  • 打赏
  • 举报
回复
引用 1 楼 zjcxc 的回复:
数据的合法性检测是早于触发器的
数据的合法性?。。。触发器的触发机制是要求执行还之前。在这之前不执行 。先触发-触发器,也应该是触发器先被触发器吧。不执行的情况下,也要检测数据的合法性?
zjcxc 2018-03-13
  • 打赏
  • 举报
回复
数据的合法性检测是早于触发器的

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧