Main_csdn_String Java攻城狮  2018年03月12日
存储过程内创建异常处理机制-自动检测错误类型并且用表记录.(详细请进贴)
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 在数据库中经历了什么? 而我这儿为什么会提示插入数据库错误的情况下,触发器没有记录下来我插入的错误到表中
...全文
504 点赞 收藏 2
写回复
2 条回复

还没有回复,快来抢沙发~

发动态
发帖子
MySQL
创建于2007-09-28

2.4w+

社区成员

5.5w+

社区内容

MySQL相关内容讨论专区
社区公告
暂无公告