MySQL事务解释

事务
一个最小的不可再分单元;
通常一个事务对应一个完整的业务;
而一个完整的业务需要批量的DML(insert ,update,delete)语句共同完成;
事务只和DML语句有关系,或者说只有DML语句才有事务;

事务的四个特征ACID
1.原子性:
事务是最小单元,不可再分;
2.一致性:
事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
3.隔离性:
一个事务不会影响其他事务的运行;
4.持久性:
在事务完成之后,该事物对数据库所作的更改将持久地保存在数据库中,并不会被回滚;

//查询是否为自动提交
show variables like '%commit%';
//开启事务,但是数据没有提交
 start transaction;
 insert into t_user(name) values ('kkk');
//事务结束
commit;

事务的隔离级别
查看隔离级别

select @@tx_isolation;
select @@session.tx_isolation;

1.测试read uncommitted(未提交读)

-- 开启事物
start transaction;
update student set ssex='男' where sname = '李四';

查询发现数据已经改变,这就是脏读,读到了未提交的数据

ROLLBACK;

再次查询数据变为原来的

2.测试read committed(已提交读)
设置事务级别为read committed,开启事务

set session transaction isolation level read COMMITTED;
start transaction;

修改数据,不提交事务

update student set ssex='男' where sname = '李四';

查询发现数据没有变化,防止了脏读
提交事务

commit;

再次查询,数据变化,但是不要求可重复读

3.测试repeatable read(可重复读)
将两个窗口级别都设置为repeatable read(可重复读)

set session transaction isolation level repeatable read;

开启事务,更新数据不提交

start transaction;
update student set ssex='男' where sname = '李四';

查询发现数据未修改,没有脏读
提交事务

commit;

再次查询,可以重复读

4.测试 串行化(serializable)
将窗口一和窗口二事物隔离级别设置为 串行化(serializable)

set session transaction isolation level serializable;

开启事务处理等待状态

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章