Mariadb 事务

事务

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

1、原子性:事务内的所有操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

2、一致性:数据库总是从一个一致性的状态转换到另一个一致性的状态(在前面的例子当中,一致性确保了,即使在执行第三、四条语句之间系统崩溃,支票账户也不会损失200美元,因为事物最终没有被提交,所以事物中所做的修改也不会保存到数据库中)

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

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

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

1>创建一个表并加入数据

 

2>查看事务变量     (  show variables   可以用来查看系统变量)

 

on : 自动提交事务

扫描二维码关注公众号,回复: 6326540 查看本文章

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 ;

查看系统变量 ( 参数)

猜你喜欢

转载自www.cnblogs.com/myxxjie/p/10960327.html
今日推荐