共享锁和排它锁

排它锁(Exclusive Locks,即X锁)

1、对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);对于普通SELECT语句,InnoDB不会加任何锁

2、如果一个事务对某一行数据加了X锁,另一个事务既不能对相应的行加S锁也不能加X锁。

共享锁(Share Locks,即S锁)

1、如果一个事务对某一行数据加了S锁,另一个事务还可以对相应的行加S锁,但是不能对相应的行加X锁。

读锁和写锁是互斥的,读写操作是串行的,都处于等待队列中时,即使写锁后到,也会优先执行写锁,如果写锁执行时间过长,可能会产生死锁;

解决办法

  1. 通过指定启动参数low-priority-updates,使MyISAM引擎默认给予读请求以优先的权利
  2. 通过执行命令SET LOW_PRIORITY_UPDATES=1,使该连接发出的更新请求优先级降低
  3. 通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级
    、系统参数max_write_lock_count设置一个合适的值,当一个表的读锁达到这个值后,MySQL就暂时将写请求的优先级降低,给读进程一定获得锁的机会
原文地址:https://www.cnblogs.com/ngrzr/p/11906769.html