西安浐灞生态区规划建设局网站,黑网站代码制作,网站建设与管理下拉列表框,重庆做模块网站目录
事务
数据库事务
事务特性
事务设置
事务隔离级别
1.读未提交
2.读已提交
3.可重复读
4.串行化
事务实现原理
原子性#xff1a;undolog
持久性#xff1a;redolog
隔离性:
如果隔离级别是读已提交#xff1a;
如果隔离级别是可重复读#xff1a; 事务…目录
事务
数据库事务
事务特性
事务设置
事务隔离级别
1.读未提交
2.读已提交
3.可重复读
4.串行化
事务实现原理
原子性undolog
持久性redolog
隔离性:
如果隔离级别是读已提交
如果隔离级别是可重复读 事务
数据库事务
一次对数据库操作过程有多条sql视为一组一次执行一组sql要么都提交成功要么都失败。保证数据的完整性mysql中只有i使用nnodb引擎的数据库或表支持事务。
事务特性
原子性一个事务中的多条sql要么都执行成功要么都失败回滚到执行前的状态。
隔离性数据库中的事物可以多个同时执行有读未提交、读已提交、可重复读和串行化四种。
持久性事务提交后保证数据永久保存即使宕机。
一致性保证数据是完整可靠的原子性、隔离性、持久性都是为了保证数据的一致性。
事务设置
关闭自动事务提交
set global autocommit 0;
查看事务自动提交开启的情况
show global varlables like autocommit; -- 开启事务 begin; sql语句 rollback;-- 事务回滚 commit; -- 事务提交 事务隔离级别
查看事务的隔离级别 SELECT session.transaction_isolation,transaction_isolation; 1.读未提交 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 另一个事务正在更改数据但还没有提交事务该事物若读取数据可能造成脏读不可重复读幻读。 2.读已提交 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED 一个事务只能读到另一个事务提交后的数据解决了脏读问题但还存在不可重复读幻读。
不可重复读 一个事务在执行事务时先后读两次两次结果不相同。
3.可重复读 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ 一个事务在执行时多次读取数据是一致的。
解决了不可重复读问题但是幻读问题没有完全解决。
例如下图事务1不加for update 执行时事务2添加一行记录后事务1不会幻读当事务2提交后事务1若有for update则会出现幻读。
幻读 一个事务读取到的数据量不同(insert delete) 4.串行化 事务只能一个一个进行即使一个事务写另一个事务读不可以但是读读可以读写不可以。 SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE 事务实现原理
原子性undolog
mysql使用undolog日志文件用来记录增删改操作的反向作 insert delete delete insert update update 出现异常事务回滚执行对应操作的反向操作。
持久性redolog
redolog
当数据库事务提交后保证数据是不可撤销。
当sql发送到mysql后事务还未提交之前如果发生断电/宕机
会将sql保存到redolog日志文件中
在mysql重启时 执行redolog中的sql
隔离性:
MVCC多版本并发控制每次事务对某记录操作时会生成一个操作的版本链
如果隔离级别是读已提交
在同一个事务中每次读取时都会从版本链上生成一个快照(readView) 每次读到得是查询时最新的数据。也称为当前读。
如果隔离级别是可重复读
在事务第一次读取数据时会从版本链上生成一个快照(readView)
之后再次读取时仍然会从上次的版本快照中读
所以隔离级别是可重复读也称为快照读。