首页 > 数据库技术 > 详细

MySQL事务

时间:2019-10-19 17:23:05      阅读:64      评论:0      收藏:0      [点我收藏+]

一, 数据库事务处理

事务处理是将多个操作或者命令一起执行,所有命令全部成功执行才意味着该事务的成功,任何一个命令失败都意味着该事务的失败。

因此,事务处理是不是一荣俱荣,而是一毁全毁。

事务的四大特征(ACID

  • 原子性(A):事务是最小的单位,不可再分
  • 一致性(C):事务要求所有的DML语句操作的时候,必须保证同时成功或者失败
  • 隔离性( I ):事务A与事务B之间具有隔离性
  • 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)

二,事务语句

BEGIN | Start Transaction开启事务 

SAVEPOINT 标识名称保留点,每个保留点都表示它的唯一名字,以便以后回退。在MySQL事务中保留点越多越好,这样能够按照自己的意愿灵活的进行回退。

ROLLBACK 保留点标识回滚到指定保留点处 

ROLLBACK事务回滚,整个事务回滚 

COMMIT提交事务,COMMIT提交或ROLLBACK回滚后会关闭事务。 

SET AUTOCOMMIT = { 0 | 1 };设置事务自动提交,1自动,0取消自动

● 查询自动提交功能状态:SELECT @@AUTOCOMMIT;

事务使用

BEGIN;#开启事务

  MDL语句;#事务失败

ROLLBACK;#事务回滚

--------------------------------------------

BEGIN;#开启事务

  MDL语句;#事务成功

COMMIT;#事务提交

三,隔离性-隔离级别

事务A与事务B之间具有一定的隔离性

隔离级别 非提交读取(脏读) 不可重复读取 幻想读
READ UNCOMMITED
读未提交
? ?
?
READ COMMITED
读已提交
?
?
?
REPEATABLE READ
可重复读
?
? ?
SERIALIZABLE
串行化
?
?
?

读未提交:Read Uncommitted

  • 事物A和事物B,事物A未提交的数据,事物B可以读取到 
  • 这里读取到的数据叫做“脏数据” 
  • 这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别

读已提交:Read Committed

  • 事物A和事物B,事物A提交的数据,事物B才能读取到 - 这种隔离级别高于读未提交 
  • 换句话说,对方事物提交之后的数据,我当前事物才能读取到 
  • 这种级别可以避免“脏数据” 
  • 这种隔离级别会导致“不可重复读取” 
  • Oracle默认隔离级别

可重复读:Repeatable Read

  • 事务A和事务B,事务A提交之后的数据,事务B读取不到
  • 事务B是可重复读取数据
  • 这种隔离级别高于读已提交
  • 换句话说,对方提交之后的数据,我还是读取不到
  • 这种隔离级别可以避免“不可重复读取”,达到可重复读取
  • 比如1点和2点读到数据是同一个
  • MySQL默认级别
  • 虽然可以达到可重复读取,但是会导致“幻像读”

串行化:Serializable

  • 事务A和事务B,事务A在操作数据库时,事务B只能排队等待 
  • 这种隔离级别很少使用,吞吐量太低,用户体验差 
  • 这种级别可以避免“幻像读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不并发

设置隔离级别

  • 方法一:在my.ini文件中使用transaction-isolation选项来设置事务服务器的省缺事务隔离级别,例:transaction-isolation = READ-COMMITTED
  • 方法二:通过动态命令设置隔离级别,在运行的服务器中动态设置;SET [ GLOBAL | SESSION ] TRANSACTION ISOLATION LEVEL 隔离级别
  • 隔离级别的作用范围
    • GLOBAL:全局级,对所有会话有效;SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别
    • SESSION:会话级,只对当前会话有效;SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别

查看隔离级别SHOW VARIABLES LIKE ‘tx_isolation‘

 

 
 
 

MySQL事务

原文:https://www.cnblogs.com/Dm920/p/11704406.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!