数据库并发
一、数据库锁
锁是计算机协调多个线程或线程并发访问某一资源的机制。
锁保证数据并发访问的一致性、有效性;
锁冲突也是影响数据库并发访问性能的一个重要因素、锁是MySQL在服务器层和存储引擎层的并发控制。
加锁是消耗资源的,包括还有锁的其他各种操作——其中有获得锁、检测锁是否已解除、释放锁。
二、锁的种类
共享锁: 也叫读锁,其他事务可以读,但不能写。就是我们对数据进行读取操作的时候,其实是不会改变数据的值的。
————SELECT * FROM table_name WHERE … LOCK IN SHARE MODE。
其他session仍然可以查询记录,并也可以对该纪录加share mode的共享锁。但是如果当前事务需要对该记录进行更新操作,则很有可能造成死锁。
排他锁: 其他事务不能读取,也不能写。
————SELECT * FROM table_name WHERE … FOR UPDATE。
其他session可以查询该记录,但是不能对该记录加共享锁或排他锁,而是等待获得锁。
三、引擎内部锁的使用
1、MyISAM引擎
——》表级锁:
①查询【读锁】
②修改【写锁】
2、InnoDB引擎
(对于普通SELECT语句InnoDB不会加任何锁,但是对于UPDATE,DELETE,INDERT语句&