博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java事务大总结(一) 先理解数据库的事务以mysql为例
阅读量:4215 次
发布时间:2019-05-26

本文共 3133 字,大约阅读时间需要 10 分钟。

一:  
MYSQL事务处理主要有两种方法。

   1、用begin,rollback,commit来实现
        begin       开始一个 
事务
        rollback   
事务
回滚
        commit    
事务
确认
    2、直接用
set
来改变
mysql
的自动提交模式
    
MYSQL
默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
      
set 
autocommit
=
0
   禁止自动提交
    
set
 
autocommit
=1 开启自动提交
来实现
事务
的处理。
但注意当你用 
set
 
autocommit
=
0
 的时候,你以后所有的SQL都将做为
事务
处理,直到你用commit确认或rollback结束,注意当你结束这个
事务
的同时也开启了个新的
事务
!按第一种方法只将当前的作为一个
事务
个人推荐使用第一种方法!
   
MYSQL
中只有INNODB和BDB类型的数据表才能支持
事务
处理!其他的类型是不支持的!(切记!)
事务的特征:
    • Atomicity(原子性)
    • Consistency(稳定性,一致性)
    • Isolation(隔离性)
    • Durability(可靠性)

注意:

事务只针对对数据数据产生影响的语句有效。

show engines //查看mysql锁支持的数据引擎。

MyISAM不支持事物,InnoDB支持事物。

默认情况下,MySQL将以自动提交模式运行,这意味着没一条小命令都将当做一个只有一条命令的事物来执行。

如果要让mysql支持支持事务,只需要修改数据引擎(alter table person type=INNODB)。

使用start transaction或者begin命令来开启一个事物,使用commit,或者rollback来结束事物。

事物的结束:事物除了commit,rollback会结束外,使用DDL或者DCL语句也会结束。

保存点:通过保存点机制:用户可以在事物里用savepoint name命令设置一些保存点,以后用户在使用rollback to savepoint name结束事物时,name之前的数据保存,之后的数据不保存。

mysql使用事务的关键字

    • begin //打开一个事务。
    • commit //提交到数据库。
    • rollback //取消操作。
    • savepoint //保存,部分取消,部分提交。
    • alter table person type=INNODB //修改数据引擎。

示例:

    1. begin  
    2.  
    3. update person set name='efgh' where id =10 
    4.  
    5. select * from person  
    6.  
    7. rollback  
    8.  
    9. select * from person 

示例:

    1. alter table person type=INNODB 
    2. begin  
    3. update person set name='efgh' where id =10 
    4. select * from person  
    5. commit  
    6. select * from person  
    7. begin  
    8. delete from person where id=21 
    9. update person set name='efgh' where id =10 
    10. commit/rollback 

针对上面部分提交,必须用到保存点。

事务保存点注意:

1.只能取消到某个保存点 rollback to savepoint p1。

2.不能提交某个保存 commit to savepoint p2//错误写法。

3.最后commit 把未取消的保存点去不提交到数据。

事务保存点使用例子:

    1. begin;  
    2. update score set score=40 where scoreid=1;  
    3. savepoint s1;  
    4. update score set score=50 where scoreid=2;  
    5. select * from score;  
    6. rollback to savepoint s1;  
    7. select * from score;  
    8. commit; 
二:MySQL数据库事务隔离级别

READ UNCOMMITTED 读取未提交的内容

在READ UNCOMMITTED隔离级,所有的事务都可以“看到”未提交事务的执行结果。在这种级别上,可能会产生很多问题,除非用户真的知道自己在做什么,并有很好的理由这样做。本隔离级很少用于实际应用,因为它的性能也不比其他级别好多少,而别的级别还有其他更多的优点。读取未提交数据,也被称为“脏读”(Dirty Read)

 

READ COMMITTED (读取提交内容)

大多数数据库系统的默认隔离级是READ COMMITED(但这不是MySql默认的)。它满足了隔离的早先简单定义:一个事务在开始时,只能“看见”已经提交事务所做的改变,一个事务从开始到提交前,所做的任何数据改变都是不可见的,除非已经提交。这种隔离级别也支持所谓的“不可重复读”(NonrepeatableRead)。这意味着用户运行同一语句两次,看到的结果是不同的。

 

REPEATABLE READ(可重读)(默认)

REPEATABLE READ 隔离级解决了READ UNCOMMITTED隔离导致的问题。他确保同一事务的多个实例在并发读取数据时,看“看到同样的”数据行。不过理论上。这会导致另一个棘手的问题:幻读(Phantom Read)。简单来说,幻读指当前用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围内的数据行时,看发现有新的“幻影”(Phantom)行。InnoDB和Falcon存储引擎通过多个版本并发控制(Multiversion Conccurency Control)机制解决了幻读问题。REPEATABLE READ 是MySql的默认事务隔离级别。InnoDB和Falcon存储引擎都遵循这种设置

 

SERIALIZABLE (可串行化)

SERIALIZABLE是最高级别的隔离级别,他通过强制的事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,SERIALIZABLE是在每个读的数据行上加锁。在这个隔离级别,可导致大量的超时(Timeout)现象和锁竞争(Lock Contention)现象。

 

 

三:修改事务隔离级别的方法:

用户可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别。它的语法如下:

SET[SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {
READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

注意:默认的行为(不带session和global)是为下一个(未开始)事务设置隔离级别。如果你使用GLOBAL关键字,语句在全局对从那点开始创建的所有新连接(除了不存在的连接)设置默认事务级别。你需要SUPER权限来做这个。使用SESSION 关键字为将来在当前连接上执行的事务设置默认事务级别。 任何客户端都能自由改变会话隔离级别(甚至在事务的中间),或者为下一个事务设置隔离级别。 

set @@global.tx_isolation='READ UNCOMMITTED';

你可以用下列语句查询全局和会话事务隔离级别:

SELECT@@global.tx_isolation;
SELECT@@session.tx_isolation;
SELECT@@tx_isolation;
你可能感兴趣的文章
ButterKnife 原理解析
查看>>
Android Context 上下文 你必须知道的一切
查看>>
ndk编译问题汇总
查看>>
Android Studio新建类头部注释和添加函数注释模板及快捷键
查看>>
回调函数的小结
查看>>
类成员函数的重载、覆盖和隐藏区别
查看>>
EasyRecovery用法进阶--高阶设置使用技巧
查看>>
用EasyRecovery“监控硬盘”功能检测硬盘问题的方法
查看>>
EasyRecovery---U盘数据恢复技巧
查看>>
EasyRecovery---ppt恢复技巧
查看>>
如何使用EasyRecovery巧妙恢复被误删的办公文档?
查看>>
EasyRecovery,拯救那些遗失的文件
查看>>
EasyRecovery---视频文件恢复技巧
查看>>
剪视频一点都不难,多款超实用剪辑软件全方位评测!
查看>>
简单好用一键恢复丢失办公文档
查看>>
EasyRecovery软件在win10系统中的功能及使用方法介绍(附注册机下载地址)
查看>>
如何用EasyRecovery找回回收站信息(附注册机下载地址)
查看>>
如何用EasyRecovery找回删除的文档(附注册机下载地址)
查看>>
EasyRecovery——一款专业的数据恢复软件
查看>>
除了数据恢复,EasyRecovery还有这样的功能!
查看>>