事务处理:
方案一:
start transaction;开启事务
commit; 提交事务
rollback; 回滚事务
常见的组合:
提交:
start transaction;
sql语句
commit;
回滚:
start transaction;
sql语句
rollback;
方案二:
select @@autocommit;//查看当前的提交方式是自动还是手动。
1:自动提交
0:手动提交
set @@autocommit = 0; //改为手动提交
事务的四大特性:
1、原子性:原子是化学反应中最小的粒子,不能再分割了。
2、持久性:就是指通过事务操作完的数据,也是永久的存储,永久的改变。
3、一致性:在使用事务操作的时候,操作前和操作后的数据是一致的。
4、隔离性:事务与事务之间是没有关系的,互相隔离,互相不干扰。但是,当多个事务并发操作同一张表的时候,就会打破隔离性。
如果隔离性被打破就会产生一些问题?
1、脏读:事务A 读到了 事务B 的未提交的数据。
2、不可重复读:事务A 读到了 事务B已经提交后的修改(update)的数据。
3、虚读(幻读):事务A 读到了 事务B 已经提交后的增加(insert)或者减少的数据。
事务的隔离级别?
1、read uncommitted:设置这个隔离级别,上面的山歌问题都会发生。
2、read committed(Oracle的默认隔离级别):设置这个隔离级别,能够解决脏读,但是会产生幻读和不可重复读。
3、repeattable read(MySQL的默认隔离级别):设置这个隔离级别,能够解决脏读,不可重复读,但是会产生幻读。
4、serializable:设置这个隔离级别,都能够解决。
查看当前的隔离级别?
select @@tx_isolation;
修改隔离级别?
set global transaction isolation level ???;