mysql 事物浅析

事物是什么?

书上说:事物做为一个不可分割的逻辑单元而被执行的一组sql语句,若是有必要,他们的执行效果能够被撤销。
个人理解:上面的这段话是《mysql技术内幕》对事物所下的定义。好高大上的样子,彷佛不怎么看得懂!我的的观点是事物是一种机制,这种机制可以保证在一组的sql语句要么都成功执行、要么都不执行!mysql

事物这么好,是否都支持?

答案是是否认的,和mysql的存储引擎有关。目前只有innodb、fclcon存储引擎支持,myisam 、memory存储引擎都不支持事物sql

事物的具体技术细节

一、事物而言有两种模式,自动提交模式(默认的模式)和非自动提交模式!

什么是自动提交模式?

这种模式会在每一条语句执行完以后把它做出的修改马上提交给数据库,并使之永久化!事实上,这至关于把每一条语句当作一个事物来执行!数据库

我的理解:因为在自动提交模式下,每执行一条sql语句都会被当作一个事物自动提交或者回滚,这样话,咱们就不能保证一组sql的语句成功的提交或者回滚了。怎么办呢?这就提提现出来了start transactioin的做用了。spa

start transaction的主要做用,就是挂起自动提交模式。所谓挂起自动提交模式,就是当咱们明确的使用了commit语句时才将修改永久的写入数据库。

什么是非自动提交模式?

任何的语句(其中一些语句例外,如start transaction……,也就是隐式提交事物的那些语句除外)都将成为该事物中的一部分,直到你发出一条commit语句或者rollback语句来提交或者撤销它为止!code

举例说明:
图片描述索引

此时尚未进行commit,开启另一个窗口进行查询:
图片描述图片

直到A窗口明显是进行了commit以后,在B窗口才真正的出现了添加的 数据!it

二、事物的隔离性

所谓事物的隔离性就是指:一个事物什么时候才能看到另一个事物所做出的修改。
因为隔离级别的不一样可能会出现各类各样的问题,常见的问题以下:
脏读:A事物在修改完一条数据,尚未进行提交,而B事物已经读取到了该条数据
幻读:A事物插入一条数据,尚未commit,而B事物已经独到了新增的这条数据io

综上所述,究其缘由是由于,B事物读到了其余事物尚未提交的数据。为了解决上述的一些问题,mysql的innodb引擎提供了4个事物的隔离级别?、innodb

READ UNCOMMITED 容许某个事物看到其它事物还没有提交的数据改动!
READ COMMITED 只容许事物看到其余事物已经提交过的数据改动!
REAPEATABLE READ 顾名思义是可重复读的意思,若是事物执行了统一条select语句,其结果是相同的,即便有其余事物在同时插入或者修改该数据行看到的结果也是同样的!这个是mysql的默认隔离级别!这里咱们重点说一下!

举例说明:
a、同事打开A和B两个窗口,查看事物的隔离级别,两个事物的隔离级别都是可重复读!
图片描述

图片描述

b、BankAccount表中的建表语句和初始数据以下:
图片描述

图片描述

c、A、B窗口中同时挂起自动提交!
图片描述

图片描述

d、在A、B窗口分别执行以下操做!
图片描述

图片描述

经过上面的实验咱们能够知道,即便是A窗口已经commit了,那么B窗口读到的仍然是start transaction以前的数据,并无读到commit以后那两条新增长的数据

SERIALIZABLE,这个隔离级别同REAPEATABLE READ很是的类似,可是对事物的隔离更加的完全,某个事物证在读去的数据时不容许其余事物进行修改的,知道该事物完成时候!(我的认为和加上了写锁的效果相似)

三、哪些sql语句会隐式的提交当前事物呢?

上面的咱们有所过有些语句是不能放在事物中的,它会隐式的提交当前事物,好比以前提到的事物的嵌套,start transaction 中又进行了start transaction

通常来讲下面几个方面的语句是会隐式的提交当前事物的:
DDL(Data Defined Language)语句:好专业的样子,其实就是数据的定义语句,常见的有:
create databases(建立数据库)
drop databases(删除数据库)
create table (建立表)
drop table(删除表)
alter table (修改表结构)
rename table (为表重命名)
truncate table(清空表)
create index(建立索引)
drop index(删除索引)

此外关于锁定和解锁的相关操做也会提交当前事物:
lock tables(锁定表)
unlock tables(解锁表)

主要参考文献

《mysql技术内幕》

以上的观点,若有纰漏清高手不吝赐教!

相关文章
相关标签/搜索