Mariadb 事务

事务

事务具备ACID特性:原子性(A,atomicity)、一致性(C,consistency)、隔离性(I,isolation)、持久性(D,durabulity)。数据库

一、原子性:事务内的全部操做要么都执行,要么都不执行,它是一个不可分割的工做单位。vim

二、一致性:数据库老是从一个一致性的状态转换到另外一个一致性的状态(在前面的例子当中,一致性确保了,即便在执行第3、四条语句之间系统崩溃,支票帐户也不会损失200美圆,由于事物最终没有被提交,因此事物中所作的修改也不会保存到数据库中)atom

三、隔离性:一个事务所作的修改在最终提交以前,对其余事务是不可见的(在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另一个帐户汇总程序开始运行,则其看到的支票帐户的余额并无被减去200美圆。)spa

四、持久性:事务完成后,该事务内涉及的数据必须持久性的写入磁盘保证其持久性。固然,这是从事务的角度来考虑的的持久性,从操做系统故障或硬件故障来讲,这是不必定的。操作系统

验证隔离性;( 开启事务,模拟转帐的环境)code

1>建立一个表并加入数据server

 

2>查看事务变量     (  show variables   能够用来查看系统变量)blog

 

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 ;

查看系统变量 ( 参数)

相关文章
相关标签/搜索