事务

1 创建账户数据库表

CREATE TABLE account(
id INT PRIMARY KEY AUTO_INCREMENT,
name varchar(10),
money DOUBLE
)

2 添加两条数据

insert into account(name,money) values ('zhangsan',1000),('lisi',1000);

3 准备工作,查看mysql是否开启自动提交事务

select @@autocommit;
image.png
@@表示全局变量,1表示开启,0表示关闭

4 取消自动提交

set @@autocommit = 0;

5 事务的原理

事务开启之后,所有的操作会临时保存在事务日志中,
事务日志只有得到commit命令才会同步到数据表中,
其它任何情况都会清空日志

6 事务的四大特性

原子性:事务是一个整体不可再分,要么成功,要么失败
一致性:转账前2人总金额为200,转账后总金额还是200
隔离性:事务与事务之间保持隔离状态,不相互影响
持久性:一旦执行成功,对数据库的修改是持久的。

7 事务并发可能引发的问题

事务在操作的时候,不同的事务应该是保持隔离,互不影响,因为并发操作,多个用户访问同一个数据,可能引起并发访问问题。

  • 脏读:一个事务读取到了另一个事务尚未提交的数据
  • 不可重复读:两次多次读取的数据内容不一致,多是由于事务update引发的问题
  • 幻读:两次或多次读取的数量不一致,多是由于insert和delete引发的

8 事务的四种隔离级别mysql

级别 引发的问题
读未提交read uncommitted 脏读,不可重复读,幻读
读已提交read committed 不可重复读,幻读
可重复读repeatbale read 幻读
串行化serializable 以上3个都解决了

9 mysql事务隔离相关命令

查询隔离级别
select @@tx_isolation;
设置隔离级别
set global transaction isolation level 级别字符串指令

原文地址:https://www.cnblogs.com/hellosiyu/p/12986125.html