赞
踩
描述事务的时候要和存储引擎挂钩
并非情况下
Atom 原子性 undolog(数据库里面的一些日志)
Consistency 一致性
Isolation 隔离性 锁
Durability 持久性 rodolog一致性是事务的根本追求,某些情况下回对事务的一致性造成破坏
事务的并发执行
事务故障或系统故障数据库通过并非控制技术和日志恢复技术来避免这种情况
并发控制保证了事务的隔离性,是数据库的一致性并不会因为并发执行操作被破坏
日志恢复技术保证了事务的原子性,使得一致性状态不会因为事务或系统故障被破坏。同时对已经提交的对数据库的修改不会因为系统崩溃而丢失,保证了事务的持久性
undolog 属于Innodb存储引擎
binglog、errorlog、慢查询日志(需要手动开启)归属于server层次的
锁:
innodb:共享锁、排它锁
myisam:共享锁、独占锁
行锁、间隙锁gap(某一个范围)、next-key(结合上面两个)
自增锁
实现原理:undo log(内存)(回滚日志)
1、Undo Log是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制,简称: MVCCD
2、在操作任何数据之前, 首先将原来数据备份到一个地方(这个存储数据备份的地方称为Undo Log)。然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态
!!!注意: undo log是逻辑日志(对应回滚,提交后删除),可以理解为:
当delete条记录时,undo log中会记录条对应的insert记录
当insert一条记录时,undo log中会记录条对应的delete记录(+10 -10)
当update一条 记录时,它记录一条对应相反的update记录(-10 +10)
查询一条数据,数据一定是在磁盘的,加载到内存上的,逻辑单元以页为单位,存储在磁盘上的一个逻辑块,innodb16k,逻辑日志就是相当于当前的一个行记录,针对于记录而言的,不是针对页。
序列不回滚,id不连续了
mvcc当前读,快照读
多版本,不可重复的读,幻读
持久性原理:Redo Log(前滚日志)内存–>磁盘
和Undo Log相反,Redo Log记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可,不需发将数据持久化。当系统崩溃时, 虽然数据没有持久化,但是Redo Log经持久化。系统可以根据Redo Log的内容,将所有数据恢复到最新的状态(innodb_ flush log. at tx commit)
默认级别1
可以设置2,服务挂了没关系,os在就行
redo 业务当前很忙,循环写进数据库,写完之后擦掉,预写日志
.事务具有隔离性,理论上来说事务之间的执行不应该相互产生影响,其对数据库的影响应该和它们串行执行时一样。
然而完全的隔离性会导致系统并发性能很低降低对资源的利用率,因而实际上对隔离性的要求会有所放宽,这也会-定程度造成对数据库一致性要求降低
. SQL标准为事务定义了不同的隔离级别,从低到高依次是
读未提交(READ UNCOMMITTED):对事务处理的读取没有任何限制,不推荐
读已提交(READ COMMITTEDI:
可重复 读(REPEATABLE READ) <mysql默认>
串行化(SERIALIZABLE)
解决幻读靠的是间隙锁next-key
不同隔离级别对应不同版本数据
undoLog保证mvcc版本
read commit 最近持久化commit数据版本
repeat 事务开启前的一个版本
设置不同隔离级别
脏读消失
在同一个事务里面不可重复读
解决了不可重复读
幻读
解决
超时
环图(深度遍历)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。