MySQL 事物

事务

1.理解

完成某个功能的整个过程 称为一个事务。
同生共死:整个过程中如果出现一点错误,整个事务失败。整个过程都成功 整个事务成功
如:转账

1000         1000
张三   --  》  李四

500         1500
0           2000


2.特性

1.原子性 整个事务不可分割
2. 一致性 整个事务过程中数据保持一致的 
3. 持久性 数据持久化保存
4.隔离性:事务与事务之间的隔离关系
		隔离级别:低 --- 高
			1. 读未提交 read uncommitted
				引发问题:脏读  模拟发工资
				解决:提升隔离级别
			2. 读已提交 read committed
				引发问题:不能读重复数据  
				解决:提升隔离级别
			3. 可重复读 repeatable read  mysql默认的隔离级别是 repeatable read
				引发问题:幻读   
				解决:提升隔离级别
			4. 串行化 serializable  这个级别比较浪费资源,效率比较低,项目中一般不用

3.实现事务的过程

3. 实现事务的过程(MySQL数据库默认一个sql语句是一个事务)
  1.查看当前数据库事务的提交方式
    SHOW VARIABLES LIKE 'autocommit';
  2.将事务的提交方式设置手动
     SET autocommit = 0;
  3.手动开启事务
     START TRANSACTION;
  4.编写事务流程
     
  5.如果没有问题,成功,执行提交
     COMMIT;
  6.失败回滚
     rollback;
   

4.隔离性演示

4-1 读未提交
引发问题:脏读  模拟发工资
		解决:提升隔离级别
		
		员工再次查询,查看结果
		
		
查看当前会话的隔离机制	select @@tx_isolation;
修改当前会话的隔离机制 set session transaction isolation level read uncommitted;

A窗口

# A 事务
select @@tx_isolation;
set session transaction isolation level read uncommitted;  #把隔离修改为第一级别 读未提交
set session transaction isolation level read committed;  #把隔离修改为第二级别 读已提交

#设置自动提交为 off
set autocommit = 0;
#手动打开事务
start transaction;


#给张三发工资
update account set money = money + 10000 where name = '张三';

select * from account;
commit;
rollback;

B窗口

#B 事务
select @@tx_isolation;
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;  #把隔离修改为第二级别 读已提交

#设置自动提交为 off
set autocommit = 0;
#手动打开事务
start transaction;


select * from account;

rollback;
原文地址:https://www.cnblogs.com/conglingkaishi/p/15215427.html