MySQL确保INSERT以原子方式完成,处理异常[已关闭]

knsnq2tg  于 2023-01-29  发布在  Mysql
关注(0)|答案(1)|浏览(87)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

4天前关闭。
Improve this question
作为数据库课家庭作业的一部分,我需要
1.为表“tbl”上的INSERT创建某个触发器。
1.确保在“tbl”上执行INSERT,以及所有后续触发器操作都是原子地完成的(在事务内部)
1.如果在“tbl”上执行INSERT期间发生任何SQLEXCEPTIONS,则使用消息“发生INSERT错误”发出错误信号
任务2)和任务3)让我感到困惑:2)如何确保INSERT在事务内部完成?是否可以将START TRANSACTION添加到BEFORE TRIGGER,并将COMMIT添加到AFTER TRIGGER?这是否会将INSERT“ Package ”在事务中?3)如何在过程外部处理INSERT语句中的SQLEXCEPTIONS?我尝试将处理程序添加到BEFORE和AFTER触发器,但它们无法解决问题。这是否可以解决?
1.我尝试将START TRANSACTION添加到BEFORE TRIGGER,并将COMMIT添加到AFTER TRIGGER,但我不确定它是否有效。
1.我试着向BEFORE和AFTER触发器添加处理程序,但它们没有解决问题。

tp5buhyn

tp5buhyn1#

创建一个这样的触发器--

CREATE TRIGGER trigger_name
AFTER INSERT ON tbl
FOR EACH ROW
BEGIN
   -- trigger actions
END;

确保在“tbl”上执行INSERT,以及所有后续触发器操作都是原子执行的

BEGIN
   START TRANSACTION;
   -- trigger actions
   COMMIT;
END;

和处理异常

FOR EACH ROW
BEGIN
   DECLARE EXIT HANDLER FOR SQLEXCEPTION
   BEGIN
       SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'INSERT ERROR';
   END;
   START TRANSACTION;
   -- trigger actions 
   COMMIT;
END;

相关问题