发布网友 发布时间:2022-04-27 04:19
共2个回答
懂视网 时间:2022-04-11 12:56
当有多个事务同时更新一条sql时,mysql是如何处理的呢?很显然,使用加锁的方式,一个事务获得了锁,进行操作,其他事务排队一个个等着,等当前这个事务执行完释放锁,其他事务获取锁取到锁的进行操作。这里的锁就是独占锁,也就是X锁。
那么如果有查询这一行数据时,是要加锁吗?不是的,mysql为了提高性能,读的时候使用mvcc机制,通过ReadView,查询undo log版本链,获取到自己能查询到的版本数据。读与更新同时进行,不互斥,性能就提高了。
共享锁又是什么呢?mysql里叫共享锁为S锁,通 过手动执行select * from table lock in share mode来加共享锁。加了共享锁,还能加独占锁吗?不能的,共享锁和独占锁是互斥的。不过共享锁和共享锁不互斥,也就是加了一个共享锁,还可以再加另一个共享锁。
独占锁 | 共享锁 | |
独占锁 | 互斥 | 互斥 |
共享锁 | 互斥 | 不互斥 |
但平时我们是很少去手动加共享锁的,一般更新时加独占锁就够了。 另外执行select * from table for update也会加独占锁。
mysql的独占锁和共享锁
标签:nbsp select 处理 width 共享 read 查询 一个个 事务
热心网友 时间:2022-04-11 10:04
1.共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。 排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。 2.Windows中可以有共享锁 3.其它用户可以并发读取,查询数据。但不能修改,增加,删除数据。资源共享.