带着疑问出发:1.myisam不支持事物,如果强制使用事物会怎样;2.mysql事物隔离级别是怎样的
解惑1
begin;
update t_base_rescode set flow_num=247 where id_rescode='xxx';
rollback;
- 结论:不会抛错就是没有办法回滚而已,数据即时生效
解惑2
4种隔离级别
- 读未提交(read-uncommitted)
- 不可重复读(read-committed)
- 可重复读(repeatable-read)
- 串行化(serializable)
mysql 8.0查询当前事物隔离级别是什么
SELECT @@global.transaction_isolation; //全局
SELECT @@transaction_isolation;//当前会话
set session transaction isolation level read uncommitted
//设置隔离级别
下面测试要分开2个窗口同时进行模拟
读未提交
select * from t_base_person where name='xx';//此处读到的usedname 为jjj //此处读到第一次的值
BEGIN;
update t_base_person set usedname='jjj' where name='xx';
select * from t_base_person where name='xx';//此处读到的usedname 为jjj
ROLLBACK;
select * from t_base_person where name='xx';//此处读到第一次的值和第一次一样
- 小结:读未提交即不关注事物是否回滚了影响业务逻辑
不可重复读
SELECT @@transaction_isolation;
select * from t_base_person where name='xx';
set session transaction isolation level read committed;
BEGIN;
update t_base_person set usedname='jjj' where name='xx';
select * from t_base_person where name='xx';
ROLLBACK;
- 小结:读到的数据是必需是commit后的数据
其余2种的方法其实也差不多就试验了
总结:在事物层级,默认级别就足够了,不用做其余修改就行
网友评论