事务保存点(oracle):savepoint
复杂业务操作中,在核心业务之后添加事务保存点 insert into person values (1, 'a', 1); insert into person values (2, 'b', 0); commit; update person set pname='c' where pid=1; savepoint a1; update person set pname='d' where pid=2; rollback to a1; commit;
事务的四大特性:ACID
原子性:事务是一个不可分割的工作单元,事务中的操作要么全都发生,要么全都不发生;
一致性:事务前后数据的完整性必须保持一致;
隔离性:并发执行的事务彼此无法看到对方的中间状态;
持久性:一个事务一旦被提交,它对数据库数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响。
通过日志和同步备份可以在故障发生后重建数据。并发访问问题
脏读:一个事务读到了另一个事务未提交的数据
不可重复读:一个事务读到另一个事务已经提交(update)的数据。引发另一个事务,在事务中的的多次查询结果不一致
虚读/幻读:一个事务读到了另一个事务已经提交(insert)的数据。引发另一个事务,在事务中的多次查询结果不一致隔离级别:解决问题
读未提交:一个事务读到了另一个事务没有提交的数据
存在脏读、不可重复读、虚读
在T线程操作时,其他线程可以进来做增删改操作,但事务不提交,其他线程可以看到T线程操作后的数据
读已提交:一个事务读到了另一个事务已经提交的数据
存在不可重复读、虚读,解决了脏读
在T线程操作时,其他线程可以进来做增删改操作,但事务不提交,其他线程看不到T线程操作后的数据
可重复读:在一个事务中读到的数据始终保持一致,无论另一个事务是否提交
存在虚读,解决了脏读,不可重复读
在T线程操作时,其他线程可以进来,但只能做增删操作
序列化:同时只能执行一个事务,相当于事务中的单线程
解决了脏读、不可重复读、虚读
永远单线程,永远线程安全,但是效率低oracle中支持读已提交、可重复读、序列化三种事务隔离级别
oracle默认隔离级别:读已提交
mysql中支持读未提交、读已提交、可重复读、序列化四种事务隔离级别
mysql默认隔离级别:可重复读
事务
最新推荐文章于 2023-07-08 12:27:26 发布