innodb事务

1.ACID特性

1.原子性
事务要么成功,要么失败。
2.一致性
事务从一种状态变为下一种一致的状态,数据完整性约束没有变
3.隔离性
一个事务在提交前对其它事务不可见
4.持久性
事务一旦提交,结果是持久的,即使宕机,数据也能恢复。

锁保证隔离性,redo log 保证原子性和持久性。undo log 保证一致性

2.事务的实现


1.redo 
事务日志通过redo 日志文件和innodb的日志缓冲来实现的。通过预写日志的方式保证事务的完整性,即在事务数据写入磁盘之前必须先写日志。但这意味着磁盘上的数据和内存中的缓冲池页数据不同步。对内存缓冲池页对修改先写入重做日志文件,然后再写入磁盘,因为是异步的方式。
show engine innodb status
可以查看三个参数,关系是:Log Sequence number(当前LSN)>=Log flushed up to(刷新到重做日志的LSN) >=Log checkpoint(刷新到磁盘的LSN)
一般在插入数据很频繁的时候发生大的差异化

1.undo 
undo和redo刚好相反。事务有时候需要撤销,如回滚操作或某种原因事务执行失败,这时候就需要undo log。
redo 存放在重做日志文件中,而undo存放在undo segment中,undo segment在数据库共享表空间内。
undo并不是恢复到事务开始的时候,因为并发系统中其他事务也在执行 ,不能影响其他事务的执行。
所以,相对于insert ,undo执行delete,对于update,undo执行相反的update,对于delete,undo执行insert。
在事务提交后,undo log就没有用了,因为不能撤销了,这些没用的页由master Thread按一定频率回收。
执行回滚后,undo页量并不会缩小,而是被标记为可用空间,供下次undo使用。

3.事务控制语句
begin
commit
rollback
savepoint identifier;设置保存点
release savepoint identifier:必须存在保存点才能释放
rollback savepoint identifier;并不会完成事务回滚,需要再显示执行rollback或commit;
set transaction;设置隔离级别
commit和commit work在completion_type=0等价,默认设置。在completion_type=1时,commit work在提交事务后立即开启另一个相同隔离级别的事务。completion_type=2时.提交事务后自动与服务器断开连接,即不能执行任何sql。
4.隐式提交SQL
这些sql的执行会有一个隐式提交(commit)操作,不能被回滚了。
truncate table,analyze,check,repaire,optimize

4.修改mysql启动时的隔离级别
[mysqld]
transaction-isolation=READ-COMMITTED
READ-COMMITTED 隔离级别只能工作在二进制日志格式为row格式下,不能是statement,该隔离级别没有gap Lock,所以不能保证数据逻辑的一致性。这个问题在mysql 5.1以后解决了,因为支持了二进制日志格式为row格式
在SERIALIABLE级别下,innodb会对每个select 加一个lock in share mode


3.分布式事务

分布式事务由一个或多个资源管理器,一个事务管理器,以及一个应用程序组成。
分布式事务采用两段式提交方式:
1.第一阶段,所有参与全局事务的节点都开始准备,告诉事务管理器它们已经准备好提交了。
1.第一阶段,事务管理器通知资源管理器执行rollback或commit,如果任何一个节点显示不能提交,则所有节点被告知不能提交。
需要注意的是。对XA的支持,是在mysql存储引擎层,即便不参与外部的XA事务,mysql的不同存储引擎层也会使用XA事务。
假设我们开启一个事务,往不同的存储引擎的不同表插入记录,也会使用XA事务,这样才能保证事务的原子性。
注意:最好不要在循环中提交事务





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值