杏彩事情与锁表.md

作者:计算机专家
  1. innodb 行锁是基于索引实现的,如果不通过索引访问数据,innodb会使用表锁。

手工锁表、释放锁

  • lock table table_name read/write
  • unlock table

在InnoDB加锁前,为什么要先start transaction

  innodb下锁的释放在事务提交/回滚之后,事务一旦提交/回滚之后,就会自动释放事务中的锁,innodb默认情况下autocommit=1即开启自动提交

检索条件使用索引和不使用索引的锁区别:

  检索条件有索引的情况下会锁定特定的一些行。

检索条件没有使用使用的情况下会进行全表扫描,从而锁定全部的行(包括不存在的记录)

     http://www.cnblogs.com/MrHSR/p/9376086.html

锁的类型

读锁:

  读锁是共享的,或者说是相互不阻塞的。多个用户在同一时刻可以同时读取同一个资源,而互不干扰。

 2. Innodb 间隙锁(Next-key)机制,以及innodb使用间隙锁的原因

表锁

  • show status like 'table%'查看表锁的竞争情况
    • Table_locks_waited 表示表级锁的争用情况

写锁:

  写锁是排他的,也就是说一个写锁会阻塞其他的写锁和读锁。另外写锁比读锁有更高的优先级,因此一个写锁请求可能会被插入到读锁 队列的前面,但是读锁则不可能插入到写锁的前面

  http://www.cnblogs.com/MrHSR/p/9390350.html

行锁

表锁:

  InnoDB还有两个表锁:意向共享锁(IS),意向排它锁(IX)

 3.不同隔离级别下,innodb的锁机制和一致性读策略不同。

页面锁

行锁:

  InnoDB实现了两种类型行级锁,共享锁和排它锁

杏彩 1

  

myisam 锁机制

myisam 更新的sql语句执行优先级优于查询语句,一旦大量的更新操作就会阻塞表,导致死锁。锁myisam引擎不适合大量更新的表。

乐观锁:

  乐观锁,也叫乐观并发控制,它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,那么当前正在提交的事务会进行回滚。

 4.mysql 的恢复和复制对innodb锁机制和一致性读策略也有较大影响。

调节myisam调度机制

  • 通过启动参数设定 low-priority-updates
  • 命令行: set LOW_PRIORITY_UPDATES = 1
  • sql语句中指定 insert update delete low_priority 属性

悲观锁:

  悲观锁,也叫悲观并发控制,当事务A对某行数据应用了锁,并且当这个事务把锁释放后,其他事务才能够执行与该锁冲突的操作,这里事务A所施加的锁就叫悲观锁。共享锁和排他锁(行锁,间隙锁,next-key lock)都属于悲观锁

  

辅助机制

通过设置max_write_lock_count设置合适的值避免一直查询不到数据

悲观锁与乐观锁的实现方式:

  悲观锁的实现依靠的是数据库提供的锁机制来实现,例如select * from news where id=12 for update,而乐观锁依靠的是记录数据版本来实现,即通过在表中添加版本号字段来作为是否可以成功提交的关键因素。

杏彩 2

本文由杏彩发布,转载请注明来源

关键词: