MySQL 中事务详解

http://blog.csdn.net/qh_java/article/details/14045765

1、事务的概念

2、在mysql中哪些存储引擎(表类型)支持事务哪些不支持

3、事务的四个属性

4、mysql事务的创建与存在周期

5、mysql行为

6、事务的孤立性和性能

7、mysql的伪事务

一、事务的概念

   事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。

二、MySQL 中的存储引擎以及支持事务,和不支持事务的存储引擎 

  1、存储引擎的概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中。

这些技术中的每一种技术都使用不同的存储机制,索引 技巧,并且最终提供广泛的不同的功能和能力。可以通过选择不同的技术,可以获得额外的速度或功能,从而改善应用的整体功能。

  2、这些不同的技术以及配套的相关功能在mysql中被称为存储引擎(也称为表类型)。

  3、通过show engines;来查看mysql支持的存储引擎。

 4、 在mysql中用的最多的存储引擎有:innodb,bdb,myisam ,memory 等。其中innodb和bdb支持事务而myisam等不支持事务。

 三、事务的四个属性:

 1、原子性:事务是由一个或一组相互关联的SQL语句组成,这些语句被认为是一个不可分割的单元。

 2、一致性:对于数据库的修改是一致的,即多个用户查的的数据是一样的。一致性主要由mysql的日志机制处理,他记录数据的变化,为事务恢复提供跟踪记录。

 3、隔离性(孤立性):每个事务都有自己的空间,和其他发生在系统中的事务隔离开来,而且事务的结果只在他完全被执行时才能看到

 4、持久性:但提交了这个事务之后对数据的修改更新就是永久的。当一个事务完成,数据库的日志已经被更新时,持久性即可发挥其特有的 功效,在mysql中,如果系统崩溃或者数据存储介质被破坏,通过日志,系统能够恢复在重启前进行的最后一次成功更新,可以反应系统崩溃时处于执行过程的事物的变化。

四、事务的创建及生存周期

对于支持事务的存储引擎,一个事务的周期:

1、在创建事务的过程中,用户需要创建一个innodb或bdb类型的数据表,其基本命令结构如下:

 create  table table_name  (file  defintions)  type=innodb/bdb;

2、对表类型进行修改

 alert  table table-name  type =innodb/bdb;

3、事务的整个过程

 use  databases;   //使用某个数据库

 start transaction ;   //开始事务 、这里也可以使用 begin   、 beginwork

 insert  into stu1 values('',  );   //进行相关的操作

 commit    //提交事物

 rollback   //撤销事务(事务回滚)

 五:mysql行为

 1、我们在使用mysql是如果关闭之后,打开在查询的话就会发现,哪些数据已经保存了,但是我们知道,在这过程中没有进行显示或隐式提交,问什么会这样那?因为我们在mysql中设置了自动提交,但我们也可以改为手动提交。

 2、 set   autocommit =0;  //关闭自动提交

3、 set   autocommit =1;  //开启自动提交

 六、事务的孤立性(隔离性)

1、在多用户的时候使用孤立性级别是很重要的,这样可以保证这些事务互不影响,保证数据库性能不受到影响。

2、mysql中提供的孤立级别有以下四种:

(1)SERIALIZABLE(序列化)  

  //以序列的形式处理事务,只有事务提交后,用户才能看到,但是该级别的孤立会影响mysql的性能,因为需要占用大量的资源,以保证使大量事务在任意时间不被用户看到。

(2)REPEATABLE  READ(可重读)

  // 相比序列化该级别在应用的安全性上做了部分妥协。

(3)READ COMMITTED(提交后读)

 // 提交后读的安全性比可重读还要低。在这一级的事务,用户可以看到其他事务添加的新记录,在事务处理时,如果存在其他用户同时对事务的相应表进行修改,那么同一事务在不同时间使用select 查询得到的结果集可能不同。

(4)READ  UNCOMMITTED(未提交读)

//安全性相比提交后读就更低,同时该孤立及也是事务之间最小的间隔(孤立程度),该孤立级容易产生虚幻读操作。其他用户可以在该孤立级上看到未提交的事务。

 3、事务孤立级的查看和修改: 

查看:select @@tx_isolation;

修改:set  global  transaction  isolation level  设置的孤立级别;

七、伪事务(锁定)

1、在MySQL中根据不同的需求,提供了很多存储引擎,但是有的存储引擎不支持事务,对于这种情况,可以使用表锁定来代替事务。

2、对于不支持事务的存储引擎MYISAM类型数据表,当用户插入,修改,删除时,这些操作都会立即保存到磁盘中,当多用户同时操作某个表时,可以使用表锁定来避免同一时间有多个用户对数据库中指定表进行操作,这样可以避免在用户操作数据表过程中受到干扰。只有但用户释放表的操作锁定后,其他 用户才可以访问这些修改的数据表。

这里的锁和java多线程中锁的作用一样,个人觉的可以这样理解。

3、对指定表进行锁操作的过程:

 (1)lock  table table-name lock type ;   //locktype 有read 和write 两种

对多个表进行加锁:

 lock table  table-name1 lock type, table -name2  lock type ,table -name3 lock type;

(2)在指定的表中进行相应的操作

(3)当用户完成对锁定数据表的操作后,进行解锁。

unlock tables ;  //释放了所有加锁表的锁。

版权声明:本文为博主原创文章,未经博主允许不得转载。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 教你如何迅速秒杀掉:99%的海量数据处理面试题

       一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿...

    bear_fish
  • CSS基础(五):定位

    相对定位指的是设置为相对定位的元素框会偏移某个距离。元素仍然保持其未定位前的形状,它原本所占的空间仍保留。

    bear_fish
  • Ext2文件系统布局,文件数据块寻址,VFS虚拟文件系统

    http://blog.csdn.net/jnu_simba/article/details/11759809

    bear_fish
  • Spring对事务的支持

    上几篇中我们主要介绍了有关数据库事务相关的知识,在这一篇中,我们将重点了解一下,在spring中是怎么对事务进行支持的。在其它的文章中我们知道spring DA...

    吉林乌拉
  • 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    Jackson0714
  • 关于数据库事务

    转账是最经典也常被拿出来说的例子。假如小明要给小红转账1000元,这个操作会涉及到两个关键:将小明的余额减少1000元,将小红的余额增加1000元。但万一在这两...

    happyJared
  • 浅谈Spring的事务隔离级别与传播行为

    Q:在一个批量任务执行的过程中,调用多个子任务时,如果有一些子任务发生异常,只是回滚那些出现异常的任务,而不是整个批量任务,请问在Spring中事务需要如何配置...

    JAVA日知录
  • sql server 事务处理

    事物处理 事务是SQL Server中的单个逻辑单元,一个事务内的所有SQL语句作为一个整体执行,要么全部执行,要么都不执行。 事务有4个属性,称为ACID(原...

    欠扁的小篮子
  • 从Spring事务的隔离级别说起

    一个对照关系表:Dirty reads non-repeatable reads phantom reads Serializable 不会 不会 不会 REP...

    春哥大魔王
  • 关于数据库的一些学习笔记

    一、锁、并发 一个很有趣的事实:容易理解的模型性能都不好,性能好的模型都不容易理解。(性能好,这就意味着锁的颗粒度很少,这样就需要更多的细节) 事务单元: 一个...

    哒呵呵

扫码关注云+社区

领取腾讯云代金券