`
dove19900520
  • 浏览: 592844 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql存储过程中的事务管理示例及说明

阅读更多

今天研究了下在mysql的存储过程中使用事务的东西,现在写了一个小示例,在此记录一下,便于以后借鉴:

 

delimiter $$
use test$$
create procedure t_insert_table()
begin
	/** 标记是否出错 */
	declare t_error int default 0;
	/** 如果出现sql异常,则将t_error设置为1后继续执行后面的操作 */
	declare continue handler for sqlexception set t_error=1; -- 出错处理
	/** 显式的开启事务,它开启后,事务会暂时停止自动提交*/
	-- start transaction;
	/** 关闭事务的自动提交 */
	set autocommit = 0;
	insert into t_bom_test(parent_id,child_id) values('D','abc');
	insert into t_trigger_test(name,age) values('zhangsan',null);
	/** 标记被改变,表示事务应该回滚 */
	if t_error=1 then
		rollback; -- 事务回滚
	else
		commit; -- 事务提交
	end if;
	-- rollback;
	-- commit;
end$$
delimiter ;

 写完这个后,又发现书本上有很多地方都是直接在开始set autocommit = 0;在最后commit或rollback就完成了,我自己试验了一下,结果出现如下问题:

1)当直接在开始set autocommit = 0;在最后commit或rollback后会出现一下错误:

Error Code: 1048. Column 'age' cannot be null ,然后查看了一下数据库表,发现第一条insert语句执行成功并成功commit了,而第二条则没有;

2)当

/** 标记是否出错 */
	declare t_error int default 0;
	/** 如果出现sql异常,则将t_error设置为1后继续执行后面的操作 */
	declare continue handler for sqlexception set t_error=1; -- 出错处理

 

这两句代码存在,而结束时不做if-else判断,直接执行rollback语句时,发现即使两条insert语句都执行成功了,但到最后仍然会被回滚掉;当直接执行commit语句时,发现如果第一条insert语句执行成功,第二条insert语句执行失败时,查看数据库表,会发现事务没有回滚。

 

以上两点是我的一点发现和疑惑,希望在此记录一下,引以为鉴,当然,如果有朋友帮我解决了这个迷惑,我会万分感激的。

 

分享到:
评论

相关推荐

    Mysql存储过程、游标、函数调用、事务处理、触发器代码示例

    Mysql存储过程、游标、函数调用、事务处理、触发器代码示例,可用作学习参考。

    MySQL 5.1中文手冊

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    mysql5.1中文手册

    MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是...

    MySQL 5.1官方简体中文参考手册

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    MYSQL中文手册

    言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 ...13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法...

    MySQL 5.1参考手册

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    mysql官方中文参考手册

    5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 5.2.4. MySQL实例管理器配置文件 5.2.5. MySQL实例管理器识别的命令 5.3. mysqld:MySQL...

    MySQL 5.1参考手册中文版

    13.4. MySQL事务处理和锁定语句 13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法 13.4.2. 不能回滚的语句 13.4.3. 会造成隐式提交的语句 13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES...

    MySQL 5.1参考手册 (中文版)

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    MySql的事务使用与示例详解

    在MySQL中,事务就是一个逻辑工作单元的一系列步骤。事务是用来保证数据操作的安全性。 事务的特征: 1.Atomicity(原子性) 2.Consistency(稳定性,一致性) 3.Isolation(隔离性) 4.Durability(可靠性) 注:事务只针对对...

    聊聊高并发高可用那些事(Kafka、Redis、MySQL)

    - 存储过程、定时任务 - MySQL 视图 (VIEW) - Redis 和 MySQL 双写一致性 - 高并发高可用方案 - Join语句还能不能用? - 主从同步有延迟怎么办? - .frm .myi .myd .ibd 文件 - 为什么表数据删掉一半,表文件大小不变...

    MySQL 5权威指南(第3版) 中文版 下载地址

    主要内容包括MySQL、PHP、Apache、Perl等组件的安装与功能简介,mysql等一些重要系统管理工具和用户操作界面的使用,MySQL数据库系统设计的基础知识与用不同语言设计MySQL数据库的过程,以及SQL语法、工具、选项、...

    MySQL面试题经典精华精确.zip

    面试题:涵盖了从基础概念到高级特性的各种问题,包括SQL语句、索引、存储过程、事务处理、性能优化等。 代码示例:针对一些具体的题目,我提供了相应的代码实现。这些代码可以帮助你更好地理解题目要求,并学习如何...

    MySQL5.1参考手册官方简体中文版

    5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 5.2.4. MySQL实例管理器配置文件 5.2.5. MySQL实例管理器识别的命令 5.3. mysqld:MySQL...

    MySQL5 权威指南第3版中文版_part1

    主要内容包括MySQL、PHP、Apache、Perl等组件的安装与功能简介,mysql等一些重要系统管理工具和用户操作界面的使用,MySQL数据库系统设计的基础知识与用不同语言设计MySQL数据库的过程,以及SQL语法、工具、选项、...

    PHP与MySQL程序设计(带完整书签)

    《php与mysql程序设计(第4版)》涵盖了两种技术新版本中出现的最新特性, 书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。 《php与mysql程序设计...

    mysql-5.7.19源码包

    MySQL 是一个广泛使用的开源关系型数据库管理系统,它以其高性能、可靠性和灵活性而受到广泛的认可和使用。 高性能:MySQL 5.7.19 通过优化查询执行计划、增强索引算法和提升存储引擎等方面,提供了更高的查询性能。...

    MySQL数据库开发教程-基础概念、SQL语法和Node.js操作详解

    - MySQL是一款开源的关系型数据库管理系统,提供数据的存储、查询、插入、更新、删除等功能。 - 文件里介绍了MySQL的一些基本概念,如数据库范式、字段约束、函数、事务等。 - 还提供了SQL语句的详细语法,如SELECT、...

Global site tag (gtag.js) - Google Analytics