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

mysql存储过程中事务操作

阅读更多
转自:http://hi.baidu.com/yangjie312/blog/item/ef67d9f9e6daa810a8d311d1.html

案例一

   1. mysql> DELIMITER $$
   2. mysql> DROP PROCEDURE IF EXISTS `transaction1`$$
   3. Query OK, 0 rows affected (0.00 sec)
   4.
   5. mysql> CREATE PROCEDURE transaction1()
   6.      -> BEGIN
   7.      ->  set autocommit = 0;
   8.      ->  insert IGNORE into t3 (id) values (1);
   9.      ->  insert IGNORE into t3 (idrr) values (2);
  10.      ->   if @@warning_count   <> 0 then
  11.      ->          rollback;
  12.      ->  else
  13.      ->          commit;
  14.      ->  end if;
  15.      -> END$$
  16. Query OK, 0 rows affected (0.00 sec)
  17.
  18. mysql> DELIMITER ;
  19. mysql> call transaction1();
  20. Query OK, 0 rows affected, 1 warning (0.06 sec)
  21.
  22. mysql> select * from t3;
  23. Empty set (0.00 sec)
  24.
  25. mysql>

案例二

   1. mysql> DELIMITER $$
   2. mysql> DROP PROCEDURE IF EXISTS `transaction1`$$
   3. Query OK, 0 rows affected (0.00 sec)
   4.
   5. mysql> CREATE PROCEDURE transaction1()
   6.      -> BEGIN
   7.      ->  set autocommit = 0;
   8.      ->  insert IGNORE into t3 (id) values (1);
   9.      ->  insert IGNORE into t3 (idrr) values (2);
  10.      ->   if @@warning_count   <> 0 ||@@error_count>0 then
  11.      ->          rollback;
  12.      ->  else
  13.      ->          commit;
  14.      ->  end if;
  15.      -> END$$
  16. Query OK, 0 rows affected (0.00 sec)
  17.
  18. mysql> DELIMITER ;
  19. mysql> call transaction1();
  20. Query OK, 0 rows affected, 1 warning (0.06 sec)
  21.
  22. mysql> select * from t3;
  23. Empty set (0.00 sec)
  24.
  25. mysql>

要使mysql支持事务,表类型要用: InnoDB


1、 隔离级别


SET TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED |REPEATABLE READ | SERIALIZABLE}

默认为:REPEATABLE READ

在SQL99中,为了实现事务的完全隔离,定义了三种必须避免的现象:


1、读"脏"数据(dirty read):即事务在运行中读到了其它事务未提交的数据。
2、不可重复读(unrepeatable read):即事务在运行中再次读取同一数据时,可发现其它事务的更新。
3、"幻象"读(phantom read):即事务在运行中再次执行同一查询时,发现其它事务的更新。

只有避免上面三种现象,才能实现真正意义上的隔离,或者称是可串行的。但是,此时事务之间因为冲突而等待的机会非常高,系统的性能可能难以达到预期的目标。 为了实现隔离性与系统性能之间的平衡,SQL99定义了四种隔离级别, 允许应用根据实际需要选择合适的隔离级别 馑闹指衾爰侗鸬暮 迦缦拢?nbsp;

读"脏"数据 不可重复读 "幻象"读
未提交读READ UNCOMMITTED N N N
提交读READ COMMITTED Y N N
可重复读REPEATABLE READ Y Y N
可串行SERIALIZABLE Y Y Y

其中"N"表示在这种隔离级别下,对应的现象不可避免,而"Y"则 表示可以避免。

2、 事务语句


START TRANSACTION

开始一个事务,如果已存在一个事务,会先立即commit.另外,autocommit属性会被设为0,直到事务结束

COMMIT

提交所有数据,释放锁

ROLLBACK

回滚事务

SAVEPOINT savepoint_name

设点存盘点

ROLLBACK TO SAVEPOINT savepoint_name

回滚至savepoint_name

SET TRANSACTION

设置隔离级别(SET TRANSACTION ISOLATION LEVEL)

LOCK TABLES

锁定表,此操作会导致当前打开的事务立即开关闭,所以应在此之前,执行commit或rollback


3、 定义事务

要开启事务处理,有如下两个方法:
a、 将autocommit设为0
b、 使用START TRANACTION语句(建议使用)

注:以下语句会导致即时commit当前事务
ALTER FUNCTION ALTER PROCEDURE ALTER TABLE
BEGIN CREATE DATABASE CREATE FUNCTION
CREATE INDEX CREATE PROCEDURE CREATE TABLE
DROP DATABASE DROP FUNCTION DROP INDEX
DROP PROCEDURE DROP TABLE UNLOCK TABLES
LOAD MASTER DATA LOCK TABLES RENAME TABLE
trUNCATE TABLE SET AUTOCOMMIT=1 START TRANSACTION
分享到:
评论

相关推荐

    MySql存储过程与事务处理教学PPT

    什么情况适合用存储过程? 当多个用不同语言开发的应用程序或不同平台的应用程序需要去执行相同的数据库操作. (避免为各个程序都开发相同的功能) 安全性要求较高时,使用存储程序和...MySql存储过程与事务处理教学PPT

    mysql经典教程+mysql存储过程讲解

    总的来说,通过学习“mysql经典教程+mysql存储过程讲解”,你不仅可以掌握MySQL的基础操作,还能深入了解如何利用存储过程、触发器和游标来实现更复杂的数据管理策略。这将有助于你成为一名更高效的数据库管理员或...

    MySQL存储过程学习

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复使用的代码块,以提高数据处理的效率和应用程序的性能。在这个"MySQL存储过程学习"的主题中,我们将深入探讨...

    MySQL存储过程.rar

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复执行的单元,极大地提高了数据库操作的效率和便捷性。在MySQL中,存储过程可以包含复杂的业务逻辑,比如条件...

    MySQL存储过程编程教程.pdf

    MySQL存储过程编程是数据库应用开发中的一个重要环节,它可以帮助开发者将一系列的数据库操作封装起来,以提高程序的可维护性和运行效率。在MySQL 5.0及以上版本中,存储过程、函数和触发器的支持为数据库提供了更...

    MySQL存储过程.pdf

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一组SQL语句并封装成一个可重复使用的对象。这种技术在处理复杂的业务逻辑、提高数据操作效率以及减少网络传输时非常有用。本文件“MySQL存储...

    存储过程文档--mysql

    存储过程是 MySQL 中的一个强大功能,它允许用户预先将常用的或复杂的工作写入 SQL 语句,并将其存储起来,以便在以后的数据库操作中可以快速调用和执行。存储过程可以提高数据库的执行速度,减少数据库开发人员的...

    MySQL存储过程基础教程.pdf

    存储过程可以提高数据库操作的效率,同时可以将复杂的操作封装起来,简化操作过程。 #### 2. 为什么要使用存储过程 存储过程可以集中管理业务逻辑,减少网络传输数据量,减少客户端和服务端的交互次数。它们也可以...

    MySQL实现创建存储过程并循环添加记录的方法

    在MySQL数据库中,存储过程是一种预编译的SQL语句集合,它可以封装一系列的操作,用于执行复杂的业务逻辑。创建存储过程并循环添加记录是数据库管理中的常见任务,尤其是在需要批量插入数据时。以下将详细解释如何在...

    MySQL存储过程经典教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一组SQL语句并封装成一个可重复使用的对象。这个经典教程旨在深入探讨存储过程的各个方面,帮助读者掌握这一强大的数据库编程工具。 1. **存储...

    php中调用MySQL存储过程

    ### PHP中调用MySQL存储过程 #### 背景与目的 在Web开发中,PHP是一种广泛使用的服务器端脚本语言,它与MySQL数据库结合得非常紧密,为开发者提供了强大的功能来处理数据。存储过程是预编译好的SQL代码块,它们...

    Mysql5存储过程中文详解

    存储过程在数据库管理系统中扮演着重要的角色,它允许开发者编写可重用的代码块,这些代码块可以执行一系列复杂的数据库操作。在MySQL5.0中,存储过程的引入极大地增强了数据库的功能性和灵活性。 ### 存储过程定义...

    Mysql存储过程和函数

    ### MySQL存储过程与函数详解 #### 一、概述 MySQL是一种广泛使用的开源关系型数据库管理系统,在数据管理和存储方面提供了强大的支持。其中,存储过程和函数是MySQL提供的两种重要的编程特性,它们可以帮助开发者...

    MySQL SQL高级特性-存储过程-触发器-事务

    1. 原子性(Atomicity):事务是不可分割的工作单位,事务中的操作要么全部完成,要么全部不执行。 2. 一致性(Consistency):事务必须使数据库从一个一致性状态转换到另一个一致性状态。 3. 隔离性(Isolation):...

    mysql存储过程电子书,可以参考

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,并将其封装成一个可重复使用的单元。这个电子书显然专注于探讨MySQL存储过程的各个方面,为学习者提供了一个深入理解、创建和使用...

    mysql存储过程

    MySQL存储过程是数据库管理系统中的一个重要组成部分,它允许程序员和数据库管理员预先定义一组SQL语句,并将其打包成一个可重用的单元。这个过程可以包含多种SQL操作,如INSERT、UPDATE、SELECT等,以及流程控制...

    PHP和MySQL存储过程实例

    根据给定的信息,我们可以深入探讨PHP与MySQL存储过程的相关知识点,包括如何在MySQL中使用`CONCAT`函数、创建存储过程以及如何通过PHP脚本来调用这些存储过程。 ### 使用 CONCAT 函数 #### 标题中的示例 ```sql ...

Global site tag (gtag.js) - Google Analytics