什么是事务?
事务就是transaction
我们可以用四个方面(ACID)去描述他!
A: atomicity 原子性 (一系列操作要么都完成,要么就都不完成)
C: consistency 一致性 (处理相同的字段,获取同一个数值)
I: isolation 隔离性 (从应用层的角度是隔离,底层的处理是通过锁机制)
D: durability 持久性 (防止数据丢失,数据如何存储相关)
InnoDB 的锁
InnoDB是支持到行锁,但是也必须了解在进行行锁之前,会对表进行加锁的
Shared and Exclusive Locks (共享锁和独享锁)
他们都是粒度,都是在行级别的锁。
共享锁:主要是在读取一行数据的时候,会使用,当其他用户读此行的时候,他们都会获取这个共享锁。
读享锁: 可以理解为排他锁,主要在行数据更新或者删除的时候,会使用的锁。
如果当前行数据被exclusive lock 了,那么必须等待其释放,才能获取共享锁。
Intention Locks (目标锁)
粒度为表级别,分为两种类型:IS(intention shared lock) IX(intention exclusive lock)
目标锁是在行数据操作之前会进行获取。
Record Locks (记录锁)
主要用来对index序列进行加锁,防止对当前数据的插入,更新和删除
Gap Locks (间隙锁)
间隙锁可以理解为是为一段索引区间建立的锁。
Next-Key Locks
结合记录锁和间隙锁,对索引操作的锁。
Insert Intention Locks (插入目标锁)
AUTO-INC Locks (自增锁)
这个自增锁是表级别的锁,主要用于对某个字段进行自增(auto increment)所使用的锁.
Predicate Locks for Spatial Indexes
如何保证数据的一致性consistency呢?
- 使用锁 2. InnoDB multiversion concurrency control (MVCC)