之前在写一个存储过程的时候由于不仔细导致数据库锁死,这里反省一下。

存储过程是这样的:把数据按顺序插入三张表,如果其中任何一处出错,就把前面已经做了的操作进行回滚,存储过程里面是用事务实现的,我是这么写的:

BEGIN
DECLARE flag TINYINT DEFAULT '';
DECLARE v_ucId TINYINT; BEGIN
SELECT 0 INTO flag;
END;
START TRANSACTION; INSERT INTO ···
INSERT INTO ···
INSERT INTO ··· IF flag=0 THEN
ROLLBACK;
ELSE
COMMIT;
END IF; SELECT flag;
END

这里运行的时候事务开始了,但是由于没有声明什么时候停止事务,所以事务一直在跑,导致数据库锁死,正确的写法应该是这样:

BEGIN
DECLARE flag TINYINT DEFAULT '';
DECLARE v_ucId TINYINT; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
SELECT 0 INTO flag;
END;
START TRANSACTION; INSERT INTO ···
INSERT INTO ···
INSERT INTO ··· IF flag=0 THEN
ROLLBACK;
ELSE
COMMIT;
END IF; SELECT flag;
END

这个不是什么技术问题,纯粹的存储过程的语法,虽然只是少了一句

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION

但是导致的后果很严重,所以特别写下来,提醒自己在对数据库进行操作的时候必须特别仔细,因为可能由于自己的一个粗心导致整个数据库挂掉

mysql存储过程事务的更多相关文章

  1. mysql 存储过程 事务; mysql的事务中包含一个存储过程

    在asp.net结合mysql的开发中,我平时用到的事务处理是 使用 TransactionOptions  来进行处理 TransactionOptions transactionOption = ...

  2. MySQL存储过程 事务transaction

    MySQL 中,单个 Store Procedure(SP) 不是原子操作,而 Oracle 则是原子的.如下的存储过程,即使语句2 失败,语句 1 仍然会被 commit 到数据库中: create ...

  3. [MySQL] MySQL存储过程 事务transaction 数据表重建

    直接上代码 -- 删除存储过程 DROP PROCEDURE IF EXISTS `renew_message_queue`; -- 添加; 的转义 DELIMITER ;; CREATE PROCE ...

  4. mysql 存储过程事务

    DECLARE t_error INTEGER DEFAULT ; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=; START TRAN ...

  5. mysql 存储过程事务支持回滚

    如图查看表的属性: InnoDB 支持事务. MyISAM 不支持事务,不过性能更优越.

  6. MYSQL存储过程事务列子

    CREATE DEFINER=`root`@`localhost` PROCEDURE `createBusiness`(parameter1 int) BEGIN #Routine body goe ...

  7. MySQL存储过程之事务管理

    原文链接:http://hideto.iteye.com/blog/195275 MySQL存储过程之事务管理 ACID:Atomic.Consistent.Isolated.Durable 存储程序 ...

  8. mysql存储过程之事务篇

    mysql存储过程之事务篇 事务的四大特征: ACID:Atomic(原子性).Consistent(一致性).Isolated(独立性).Durable (持久性) MySQL的事务支持不是绑定在M ...

  9. Mysql存储过程包括事务,且传入sql数据运行

    有这样一个需求.要求在mysql存储过程中使用到事务,并且运行的是动态的sql语句 代码例如以下: BEGIN DECLARE in_data TEXT; /** 标记是否出错 */ DECLARE ...

随机推荐

  1. 转 Zabbix 3.2.6通过SNMP和iDRAC监控DELL服务器

    https://www.cnblogs.com/saneri/p/7772641.html

  2. 转 linux下ClamAV使用

    linux下ClamAV使用 第一步:Clamav下载http://www.clamav.net/downloads#yuminstall wget –y第二步:创建clamav用户和组groupad ...

  3. iOS popToViewController具体用法

    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIn ...

  4. go micro 微服务框架温习

    go mod edit -require="github.com/chromedp/chromedp@v0.1.0" @后面加上你需要的版本号.就可以 已经修改go.mod 里的依 ...

  5. [转]Microsoft VS Code 改变默认文字编码

    概要:文件->首选项->设置 输入: "files.autoGuessEncoding": true, 然后勾上. 链接地址:https://jingyan.baidu ...

  6. ASP.NET全球化与本地化 c#多国语言的支持 (项目支持多国语言的开发)

    ASP.NET 2.0及以上的开发平台,为全球化本地化应用程序提供了工具,而且实现起来非常简单.以下内容是使用c#,按照帮助一步步做的,将为初学者提供详细的实现步骤. 一 几个必要概念 (一) 支持全 ...

  7. 随机图片大小在DIV中垂直居中对齐总结

    老遇到这种样式 现在总结一下 <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type&quo ...

  8. iOS-UITableView的性能优化10个小技巧

    通常你会发现一个图片类的app会在一个imageView上做下面这些事情: 1  下载图片(主要的内容图片+用户头像图片)2  更新时间戳3  展示评论4  计算动态的cell的高度 Tip#1 学习 ...

  9. phar缓存 编译缓存 提高phar文件包加载速度

    phar文件可以把用到的PHP文件全部打包在一个文件中,十分方便网站部署.但是单个的PHP文件可以使用opcache缓存(字节码缓存),以提升PHP的运行速度.那么PHAR文件包如何使用缓存呢. 这里 ...

  10. Python基础--软件Anaconda的下载与安装

    1.Anaconda软件的优点: Anaconda指的是一个开源的Python发行版本开发平台,在进行Python开发上方便简洁,有利于初步学习和实践深度学习. 2.Anaconda软件的下载: An ...