事务
2020-12-14 本文已影响0人
山不转人自转
事务四大特性:
①.原子性:事务所有操作不可再分割,也就是“事务中所有操作要么全部执行成功,要么全部执行失败"。
②.一致性:事务执行后,数据库状态与其他业务规则保持一致,如转账业务,无论事务执行成功与否,参与转账打两个账户余额之和应该是不变的。
③.隔离性:是指并发操作中,不同事务应该隔离开来,使每个并发中的是事务不会相互干扰。
④.持久性:一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须保证通过某种机制恢复数据。
有account表:
image.png
update account set balance=balance+1100 where name='lucky';
update account set balance=balance-1100 where name='theme';
开始事务:start transaction;
结束事务:commit;
回滚事务:rollback;
*注意:所有的事务都是使用同一个connection对象!
并发事务的问题:
①,脏读:读取到另一个事务的未提交数据,称之为脏读(绝对不允许出现);
②,不可重复读:读取到两次数据不一致,因为另一个事务对该记录进行了修改;
③,幻读(虚读 ):对同一张表两次查询不一致,因为另一个事务插了一条数据。
事务的隔离级别:
SERIALIZABLE(串行化):没有并发问题,性能最差;
REPEATABLE READ(可重复读):处理脏读和不可重复读问题,没处理幻读,性能比SERIALIZABLE好一些;
READ COMMITTED(读已提交数据):处理脏读,不会处理不可重复读和幻读,性能比REPEATABLE READ好;
READ UNCOMMITTED(读未提交数据):啥也不处理,性能最好;