MySQL--事务

2018-12-20  本文已影响0人  一步一看

基本原理(必须是INNODB存储引擎):将用户所做操作暂时保存起来,不直接存到数据表,等到用户确认结果之后,再执行操作。

事务处理图解

事务在mysql重通常是自动提交的,但是也可以手动事务

自动事务(autocommit)

当客户端发送一条sql指令(写操作,增删改)给服务器执行之后,不用等待用户反馈结果,会自动同步到数据表。 

可以同构哦autocommit

show variable like 'autocommit'

关闭之后就不会帮助用户自动提交了:set autocommit off。

一旦关闭,需要提供是否同步的命令

commit: 提交

rollback:回滚,清空之前的操作

通常不会关闭自动事务,只会在需要使用的时候才会进行操作。

手动事务

命令:

start transaction;开启事务,从这条语句开始,后面所有语句都不会直接写入到数据表(而是保存在事务日志中)

事务处理:多个写指令构成

事务提交:commit/rollback,到这个时候事务才结束。

开启事务:start transaction;

执行事务:

将多个连续但是一个整体的sql指令逐一执行

将多个事务同时执行

提交事务:

确认提交:commit

回滚操作:rollback;

回滚点(savepoint):

当有一系列事务操作是,其中步骤成功了,不需要重新来过,就可以设置回滚蒂娜,后面如果失败,可以回滚到记号位置

增加回滚点:savepoint 回滚点名字;//字母和下滑线构成

回到回滚点:rollback to  回滚点名字; //回滚点之后的操作就没有了

注意,在一个事务处理中,有很多步骤,可以设置多个回滚点,但是如果回到前面的回滚点,后面的回滚点就失效。

    事务特点:

原子性(atomicity):事务是一个不可分割的工作单位,事务中包括的诸多操作要么不做,要么都做,事务从start transaction起到提交事务(commit|rollback)要么成功,要么失败

一致性(consistency):事务必须是使数据库从一个一直行状态,变到另一个一致性状态,一致性与原子性是密切相关的。数据表中的数据修改,要么一次性修改,要么不变。

隔离性(isolation):一个事务的执行不能被其他事务干扰。即:一个事务内部操作及使用 的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。如果一个客户端,在使用事务操作一个数据(可能是一行/整个表)的时候,另一个客户端不能对该数据进行操作

如果条件中使用了索引(主键)那么系统是根据主键直接找到某条记录,这时候,与其他记录无关,只隔离一条数据,如果没有索引,系统是通过全表索引(每一条记录都会去检查被检索的所有数据都会被锁定(整表)

持久性(durability)/永久性(permanence):指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来其他操作或故障不应该对其有影响(commit之后,所有操作不可返回)

隔离性例子
上一篇下一篇

猜你喜欢

热点阅读