今天研究了下在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存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复使用的代码块,以提高数据处理的效率和应用程序的性能。在这个"MySQL存储过程学习"的主题中,我们将深入探讨...
MySQL存储过程编程是数据库应用开发中的一个重要环节,它可以帮助开发者将一系列的数据库操作封装起来,以提高程序的可维护性和运行效率。在MySQL 5.0及以上版本中,存储过程、函数和触发器的支持为数据库提供了更...
### MySQL存储过程基础知识点 #### 1. 存储过程的定义和示例 存储过程是存储在MySQL服务器上的预编译的SQL代码段,它能够接受参数、执行一系列的SQL语句和流程控制语句。存储过程可以提高数据库操作的效率,同时...
通过以上示例,我们可以看到在PHP中调用MySQL存储过程的基本流程。这种方式不仅提高了代码的可读性和可维护性,还能显著提高系统的执行效率和安全性。开发者可以根据自己的需求灵活地调整存储过程中的逻辑,从而更好...
通过以上介绍,我们可以看到MySQL存储过程和函数提供了强大的功能,可以帮助我们更高效地管理数据库。无论是创建、调用还是维护存储过程和函数,都有相应的语法和工具支持。掌握这些技能将有助于提高开发效率,实现...
在给定的示例中,创建了一个名为`myproc`的存储过程: ```sql DELIMITER // -- 更改分隔符,避免与默认的分号冲突 CREATE PROCEDURE myproc() BEGIN DECLARE num INT; SET num = 1; -- 初始化变量num WHILE num ...
本手册适用于对MySQL存储过程和函数感兴趣的开发者和技术人员,特别是那些希望深入了解并掌握如何在实际项目中高效利用这些功能的专业人士。手册中的所有示例和操作均基于CentOS 6.2 64位系统和MySQL 5.6版本进行。 ...
同时,`mysql存储过程教程.pdf`很可能是一个详细的指南,涵盖了存储过程的基础概念、语法、高级特性以及实例。通过阅读这份教程,读者可以学习如何创建、修改、删除存储过程,理解如何在存储过程中使用变量、游标、...
根据给定的信息,我们可以深入探讨PHP与MySQL存储过程的相关知识点,包括如何在MySQL中使用`CONCAT`函数、创建存储过程以及如何通过PHP脚本来调用这些存储过程。 ### 使用 CONCAT 函数 #### 标题中的示例 ```sql ...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一组SQL语句并封装成一个可重复使用的对象。这个教程PDF很可能是为初学者和有一定经验的开发者准备的,旨在深入理解如何利用存储过程提升数据库...
在数据库管理中,存储过程是一种预编译的SQL语句集合,它封装了特定的数据库操作,便于重复使用和提高性能。在这个场景中,我们关注的是一个名为"银行转账存储过程"的特定应用,它是针对银行转账业务逻辑的实现。这...
MySQL存储过程是数据库管理系统中的一个重要组成部分,特别是在MySQL 5.0版本中,它提供了一种组织和执行复杂SQL语句的高效方式。本资料集合包含了对MySQL 5.0官方存储过程的详细翻译,旨在帮助学习者深入理解并熟练...
### MySQL存储过程入门学习 #### 一、存储过程概述 **存储过程**(Stored Procedure)是一种在数据库中存储的预先编写并编译好的SQL程序或函数集合。存储过程的主要优势在于可以提高应用程序的性能和响应速度,同时...
MySQL是一个广泛使用的开源关系型数据库管理系统,以其高效、...本资料包中的"www.pudn.com.txt"可能包含了更多关于MySQL存储过程的详细信息和示例,而"MySql"可能是一个包含示例数据库的文件,供学习者实践和探索。
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,并将它们封装成一个可重用的对象。在MySQL5.x版本中,存储过程提供了更高效、更安全的方式来管理和执行复杂的数据库操作。本PDF...
在数据库管理中,存储过程(Stored Procedure)是预编译的SQL语句集合,它可以包含一系列的SQL操作,包括查询、插入、更新和删除数据,甚至可以包含事务处理和控制流语句。存储过程在数据库设计中扮演着重要的角色,...
MySQL存储过程是数据库管理系统提供的一种高级程序设计语言,它允许用户在数据库中封装一系列复杂的SQL语句,以实现更高效、更便捷的数据操作。在存储过程中,我们可以定义输入参数、输出参数,甚至输入/输出参数,...