1.锁
为什么需要锁?
在实际中,比如在淘票票抢电影票,A用户和B用户都想要要2排2座,那么它们必然只有一个人能抢到。在这个过程中,使用锁可以对有效的资源在并发的环境下进行保护,解决隔离和并发的矛盾。
什么是锁?
锁是计算机协调进程和线程在并发情况下访问某一资源的协调机制
在数据库中,数据是提供给多用户的共享资源,锁是用来保证资源的有效性和一致性
2.Mysql锁(MyISAM引擎)
MySql锁机制的特点是在不同的储存引擎下采用了不同的锁
MyISAM引擎下和Memory引擎下用的都是表级锁(table_level lock)
MyISAM表级锁的两种模式 表共享读锁和表独占写锁
如何给表加锁?加锁后会有哪些影响?
表共享锁
在本会话中
在其它会话中
表独占锁
在本会话中
在其它会话中
总结:
3.MySQL锁(InnoDB引擎)
InnoDB引擎下采用的是行级锁(row_level lock)
行锁
共享锁又称,读锁。当一个事务对某几行上读锁时,允许其它事务对这几行进行读操作,但不允许其进行写操作,也不允许其它事务给这几行上排它锁(写锁),但允许上读锁。
排它锁又称,写锁。当一个事务对某几个上写锁时,不允许其它事务写(别的事务写其它行也会成为等待状态),但允许读,更不允许其它事务给这几行上任何锁。
测试在某行上排它锁后,其它会话在各类情况下的操作结果
当事务提交,COMMIT会进行锁的释放。
测试在某行上共享锁后,其它会话在各类情况下的操作结果
引入一道常见面试题:
正确的方法是,首先创建一张表和你预期更新后的表结构相同,然后把旧表的数据复制到新表中,并在数据库设置一个一个触发器,让旧表更新的数据更新在新表中,当全部同步后,执行一个把新表名改旧表,旧表删除的操作。