MySql数据库的事务与锁

2018-05-05  本文已影响0人  念念咚咚锵

什么是事务?

事务就是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呢?

  1. 使用锁 2. InnoDB multiversion concurrency control (MVCC)
上一篇 下一篇

猜你喜欢

热点阅读