MySQL锁表

来源:互联网 发布:5元已备案域名批发购买 编辑:程序博客网 时间:2024/06/10 01:36

1、锁:计算机协调多个进程或线程并发访问某一资源的机制​

2、MySQL锁:

不同的存储引擎支持不同的锁机制​

1)页级锁:引擎DBD(也支持表级锁)

​开销和枷锁时间结余表锁和行锁间;会出现死锁;锁定力度介于表锁和行锁间,并发度一般

2)表级锁:引擎MyISAM、MEMORY

锁住整个表,可同时读,写不行

​开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突概率最高,并发度最低

适合以查询为主,只有少量按索引条件更新数据的应用​

模式:表共享读锁、表独占写锁​

3)行级锁:引擎INNODB​(默认行级锁,也支持表级锁)

单独的一行记录加锁

​有索引情况下为行锁,无索引则为表锁

​开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突概率最低,并发度也最高​

适合有大量按索引条件并发更新少量不同的数据,同时又有并发查询的应用​

*注:事务

是由一组SQL语句组成的逻辑处理单元​,四个属性:

​原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全部执行,要么全都不执行;

​一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态;

​隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行;

​持久性(Durable):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。

​InooDB两种模式的行锁:

1)共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。 ( Select * from table_name where ……lock in share mode)

2)排他锁:允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和 排他写锁。(select * from table_name where…..for update)

为了允许行锁和表锁共存,实现多粒度锁机制;同时还有两种内部使用的意向锁(都是表锁),分别为意向共享锁和意向排他锁。

InnoDB行锁是通过给索引项加锁来实现的,即只有通过索引条件检索数据,InnoDB才使用行级锁,否则将使用表锁!

0 0