Mysql 支持3中锁结构
表级锁,开销小,加锁快,不会出现死锁,锁定的粒度大,冲突概率高,并发度最低
行级锁,开销小,加锁慢,会出现死锁,锁定粒度小,冲突概率最低,并发度最高
页面锁,开销和加锁处于表锁和行锁之间...对于一些特定的事务,可以使用表锁来提高处理速度或减少死锁的可能
Mysql中的锁
MySql乐观锁悲观锁
悲观锁
悲观锁的特点是先获取锁,再进行业务操作,即“悲观”的认为获取锁是非常有可能失败的,因此要先确保获取锁成功再进行业务操作...当数据库执行select for update时会获取被select中的数据行的行锁,因此其他并发执行的select for update如果试图选中同一行则会发生排斥(需要等待行锁被释放),因此达到锁的效果...另外mysql还有个问题是select for update语句执行中所有扫描过的行都会被锁上,这一点很容易造成问题。因此如果在mysql中用悲观锁务必要确定走了索引,而不是全表扫描。...乐观锁在不发生取锁失败的情况下开销比悲观锁小,但是一旦发生失败回滚开销则比较大,因此适合用在取锁失败概率比较小的场景,可以提升系统并发性能
乐观锁还适用于一些比较特殊的场景,例如在业务操作过程中无法和数据库保持连接等悲观锁无法适用的地方