共享锁和排它锁
排它锁(Exclusive Locks,即X锁)
1、对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);对于普通SELECT语句,InnoDB不会加任何锁
2、如果一个事务对某一行数据加了X锁,另一个事务既不能对相应的行加S锁也不能加X锁。
共享锁(Share Locks,即S锁)
1、如果一个事务对某一行数据加了S锁,另一个事务还可以对相应的行加S锁,但是不能对相应的行加X锁。
读锁和写锁是互斥的,读写操作是串行的,都处于等待队列中时,即使写锁后到,也会优先执行写锁,如果写锁执行时间过长,可能会产生死锁;
解决办法
- 通过指定启动参数low-priority-updates,使MyISAM引擎默认给予读请求以优先的权利
- 通过执行命令SET LOW_PRIORITY_UPDATES=1,使该连接发出的更新请求优先级降低
- 通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级
、系统参数max_write_lock_count设置一个合适的值,当一个表的读锁达到这个值后,MySQL就暂时将写请求的优先级降低,给读进程一定获得锁的机会