Mariadb 事务
Posted myxxjie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mariadb 事务相关的知识,希望对你有一定的参考价值。
事务
事务具有ACID特性:原子性(A,atomicity)、一致性(C,consistency)、隔离性(I,isolation)、持久性(D,durabulity)。
1、原子性:事务内的所有操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
2、一致性:数据库总是从一个一致性的状态转换到另一个一致性的状态(在前面的例子当中,一致性确保了,即使在执行第三、四条语句之间系统崩溃,支票账户也不会损失200美元,因为事物最终没有被提交,所以事物中所做的修改也不会保存到数据库中)
3、隔离性:一个事务所做的修改在最终提交之前,对其他事务是不可见的(在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外一个账户汇总程序开始运行,则其看到的支票账户的余额并没有被减去200美元。)
4、持久性:事务完成后,该事务内涉及的数据必须持久性的写入磁盘保证其持久性。当然,这是从事务的角度来考虑的的持久性,从操作系统故障或硬件故障来说,这是不一定的。
验证隔离性;( 开启事务,模拟转账的环境)
1>创建一个表并加入数据
2>查看事务变量 ( show variables 可以用来查看系统变量)
on : 自动提交事务
3>开启事务 ( 两种方式 begin; start transaction;) 开启事务不会自动提交,操作处于内存当中
4>模拟转账
$
5>再看一个终端查看
&开启事务并模拟转账
会发现一直卡着,直到报错
这是因为 事务的隔离性, 相互是不可干扰
6> 关闭事务 ( 写到了 磁盘上)
7>查看
#查看 另一个终端
为什么没变? 因为此时还处于事务当中,需要结束事务
&模拟转账断电
1>开启事务
2>转账
3> 模拟断电
4>再次进入数据库
5>查看
会发现转出去的又回来了, 这是因为,从begin 开始这已经是一个事务, 要么就全部执行成功,要么有一个失败全失败。
失败后于做了一次回滚 ( rollback)( 相当于咱们什么都没操作)
6>这时候则需要人为 来调整下
注: 结束事务有两种方法,commit ; rollback;(回滚)
补充:
&1
这里默认 ON 在不开启 begin 的情况下 每执行一条seq 语句都会自动提交事务
改变它的默认参数
&1永久方法
编辑配置文件
vim /etc/my.cnf.d/server.cnf
0 : 关闭
重启数据库并查看
&2临时修改
set xxxx = 0
补充2: show variables ;
查看系统变量 ( 参数)
以上是关于Mariadb 事务的主要内容,如果未能解决你的问题,请参考以下文章