`
lwcheng1985
  • 浏览: 93088 次
  • 性别: 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 存储过程编程基础 -- 指南,基本语句,存储过程中的 SQL 和错误处理  创建 MySQL 存储过程程序 -- 事务处理,内建函数,存储过程函数和触发器  在应用程序中使用 MySQL 存储...

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

    MySQL SQL高级特性-存储过程-触发器-事务,非常不错,感谢

    mysql索引、触发器、事务、存储过程说明

    mysql索引、触发器、事务、存储过程说明

    mysql存储过程事务管理简析

    1,MySQL的事务支持 1)MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关: Sql代码 代码如下: MyISAM:不支持事务,用于只读程序提高性能 InnoDB:支持ACID事务、行级锁、并发 Berkeley DB:支持...

    在Mysql存储过程中使用事务实例

    主要介绍了在Mysql存储过程中使用事务实例,需要的朋友可以参考下

    mySQL事务处理

    或者 只可以通过存储过程来实现, 单行的锁定 BEGIN; SELECT book_number FROM book WHERE book_id = 123 FOR UPDATE; --这里for update , 以前用Oracle的时候也是有这个行锁 // ... UPDATE book SET book_number ...

    银行转帐存储过程

    模拟银行转帐过程的存储过程,实现登录,转帐的管理,可根据返回的信息判断错误,实现事务操作

    mysql 流水号 存储过程 附表结构

    mysql上的存储过程,测试通过。 事务中获取流水号, 可配置前缀,后缀,日期字串, 可设定流水号归零周期, 带表结构, 方便移植到其他结构数据库。

    MySQL存储过程例子(包含事务,输出参数,嵌套调用)

    MySQL存储过程例子,包含事务,输出参数,嵌套调用,学习mysql存储过程的朋友可以参考下。

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

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

    第六章__MySQL存储过程.ppt

    2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。 3.存储过程可以重复使用,可减少数据库开发人员的工作量...

    MySQL技术内幕 InnoDB存储引擎.pdf

    最近在学习MySQL技术内幕 InnoDB存储引擎 第2版,整理了一些文档分享出来,同时也方便以后查看。若有不当之处,烦请批评指正。 1. MySQL体系结构和存储引擎 2. InnoDB存储引擎 2.1 InnoDB体系结构 2.2 ...

    MySQL数据库:MySQL存储引擎.pptx

    InnoDB是事务型数据库的首选引擎,为MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎,其它存储引擎都是非事务安全表,支持行锁定和外键,MySQL5.5以后默认使用InnoDB存储引擎。 ;2.MyISAM

    MySQL数据库存储过程和事务的区别讲解

    一组为了完成特定功能的SQL语句集(或者自定义数据库操作命令集), 根据传入的参数(也可以没有), 通过简单的调用, 完成比单个SQL语句更复杂的功能, 存储在数据库服务器端,只需要编译过一次之后再次使用都不...

    mysql内核 innodb存储引擎

    接着以InnoDB的内部实现为切入点,逐一详细讲解了InnoDB存储引擎内部的各个功能模块,包括InnoDB存储引擎的体系结构、内存中的数据结构、基于InnoDB存储引擎的表和页的物理存储、索引与算法、文件、锁、事务、备份,...

    MySQL核心Innodb存储引擎浅析—事务系统

    MySQL核心Innodb存储引擎浅析—事务系统

Global site tag (gtag.js) - Google Analytics