再谈mysql锁机制及原理—锁的诠释
加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。 什么是锁? 锁是计算机协调多个进程或线程并发访问某一资源的机制 。 锁保证数据并发访问的一致性、有效性; 锁冲突也是影响数据库并发访问性能的一个重要因素。 锁是Mysql在服务器层和存储引擎层的的并发控制。 为什么要加锁 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 锁是用于管理对公共资源的并发控制。 也就是说在并发的情况下,会出现资源竞争,所以需要加锁。 加锁解决了 多用户环境下保证数据库完整性和一致性。 Lock的对象是事务,用来锁定的是数据库中的对象,如表、页、行。并且一般lock的对象仅在事务commit或rollback后进行释放(不同事务隔离级别释放的时间可能不同)。 锁分类 共享锁||读锁||S 锁(share lock):其他事务可以读,但不能写。允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。 排他锁||写锁||X 锁(exclusive) :其他事务不能读取,也不能写。允许获得排他锁的事务更新数据