mysql-innodb-锁

1. 锁是数据库区别文件系统的一个关键特性。

2. innodb存储引擎中锁的类型

    a. 共享锁:允许事务读一行数据

    b. 排他锁:允许事务删除或更新一行数据

    c. 意向共享锁:事务想获取一个表中的某几行共享锁

    d. 意向排他锁:事务想获取一个表中的某几行排他锁

 

3. 查询innodb事务,锁的信息

information_schema.INNODB_TRX

information_schema.INNODB_LOCKS

information_schema.INNODB_LOCK_WAITS

 

4. innodb一致性非锁定读:通过多版本控制读取当前执行时间数据库中行的数据。多版本的数据存储在undo段中。

Read Committed数据隔离级别下,是读取最新版本的行数据。

repeatable read数据隔离级别下,是读取事务开始时的行数据版本。

 

5. select加锁

select ... for update 加 排他锁

select ... lock in share mode 加 共享锁

 

6. 自增长和锁

AUTO-INC locking :select max(auto_inc_col) from t for update

 

a. innodb_autoinc_lock_mode=0 自增长使用AUTO-INC locking

b. innodb_autoinc_lock_mode=1 自增长”simple insert“使用互斥量

c. innodb_autoinc_lock_mode=2 自增长都使用互斥量(可能导致自增值不连续)

 

7. 锁的算法

a. Record Lock:单个行记录上的锁

b. Gap Lock:间隙锁,锁定一个范围,但不包括记录本身

c. Next-Key Lock(Record Lock + Gap Lock ):锁定一个范围并锁定记录本身

 

8. 锁的问题

a. 丢失更新 :A事务的更新被B事务的更新覆盖。读取记录是加排他锁可以解决这类问题
b. 脏读:读取了事务中未提交的数据。在read uncommit数据库隔离级别下会产生此类问题。在 read commit或更高级的数据库隔离级别下不会出现此类问题。

c. 不可重复读:事务A两次读取的数据不一致(由于其他事务修改了改数据并提交了事务)。在read repeatable或serializable数据库隔离级别下可避免此类问题。

 

9. 阻塞

innodb_lock_wait_timeout 动态参数,可在mysql运行时修改

innodb_rollback_on_timeout 静态参数

 

10. 锁升级

innodb不存在锁升级的情况。

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值