Mysql事务一致性,原子性是如何实现的?
首先是通过锁和mvcc实现了执行过程中的一致性和原子性
其次是在灾备方面通过Redo log实观,Redo log会把事务在执行过程中对数据库所做的所有修改都记录下来,在之后系统崩溃重启后把事务所做的任何修改都恢复出来。
Mysql事务的持久性是如何实现的?
使用Redo log保证了事务的持久性。当事务提交时,必须先将事务的所有日志写入日志文件进行持久化,就是我们常说的WAL(writeahead log机制,如果出现新电重启便可以从redolog中恢复,如果redolog写入失败赂么也就意味着修改失败整个事务也就直接回滚了.
表级锁和行级谈有什么区别?
表级锁:串行化(serializable)时,整表加锁,事务访问表数据时需要申请锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做 ddl 处理时使用
行级锁:除了串行化(serializable)时InnoDB使用的都是行级锁,只镀一行数据,其他行数掘不影响,并发能力强.。
什么是行级锁? Mysql如何完成的?
行级锁实现比较复杂不是单纯领住一行数据,是由mvcc完成的。
什么是共享谈(读锁)?
共享锁或S锁,其它事务可以继续加共享琐,但不能加对它锁
什么是排它锁(写锁/独占锁)?
排它锁或X锁,在进行写授作之前要申请并获得,其它事务不能再获得任何锁.
什么是意向锁?
它分为意向共享(IS)和意向排他稷(lX)
一个事务对一张表的某行添加共享锁前,必须获得对该表一个IS锁或者优先级更高的锁.一个事务对一张表的某行添加排它锁之前,它必须对该表获取一个 IX 锁.
意向钞属于表锁,它不与innodb中的行够冲突,任意两个意向锁之间也不会产生冲突,但是会与表谈(S锁和X锁)产生冲突
lnnoDB支持哪几种谈?
表锁,行锁,间隙锁,Next-Key锁等
在Serializable中读加共享锁,写加排他领,读写互斥
两段欲协议,将事务分成两个阶段,加锁阶价段和解锁阶段(所以叫两段锁)
当前读和快照读分别是什么?
当前读:在锁定读(使用锁隔离事物)的时候读到的是最新版本的数据
快照读:可重复读(repeatable-read)下mwcc生效读取的是数据的快照,并不是最新版本的数据(未提交事物的数据)