mysql innodb不是行级锁吗?怎么会把整个表锁死
发布网友
发布时间:2022-04-25 16:23
我来回答
共4个回答
热心网友
时间:2022-04-07 19:24
行级锁 是说最小粒度的锁是行级锁。
当需要更新同一个页面中的数据时,是会升级到页面锁的。
当对整个表进行更新时,会使用表级锁;如果此时使用一个一个行级锁,不光浪费资源,也会影响效率。
热心网友
时间:2022-04-07 20:42
innodb在有索引的情况下会默认使用行锁,不然会使用表锁
热心网友
时间:2022-04-07 22:16
innodb下数据加锁没使用到索引,行锁会升级为表锁。
热心网友
时间:2022-04-08 00:08
对WRITE,MySQL使用的表锁定方法原理如下:
如果在表上没有锁,在它上面放一个写锁。 否则,把锁定请求放在写锁定队列中。
对READ,MySQL使用的锁定方法原理如下:
如果在表上没有写锁定,把一个读锁定放在它上面。 否则,把锁请求放在读锁定队列中。
当一个锁定被释放时,锁定可被写锁定队列中的线程得到,然后是读锁定队列中的线程。这意味着,如果在一个表上有许多更新,SELECT语句将等待直到没有更多的更新。
mysql 不同的存储引擎表示对应的不同的锁机制,如MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。