MySQL数据库原理学习(三十六)
5. 锁
5.1 概述
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个
角度来说,锁对数据库而言显得尤其重要,也更加复杂。
MySQL中的锁,按照锁的粒度分,分为以下三类:
全局锁:锁定数据库中的所有表。
表级锁:每次操作锁住整张表。
行级锁:每次操作锁住对应的行数据。
5.2 全局锁
5.2.1 介绍
全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。
其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。
为什么全库逻辑备份,就需要加全就锁呢?
A. 我们一起先来分析一下不加全局锁,可能存在的问题。
假设在数据库中存在这样三张表: tb_stock 库存表,tb_order 订单表,tb_orderlog 订单日志表。
在进行数据备份时,先备份了tb_stock库存表。
然后接下来,在业务系统中,执行了下单操作,扣减库存,生成订单(更新tb_stock表,插入tb_order表)。
然后再执行备份 tb_order表的逻辑。
业务中执行插入订单日志操作。
最后,又备份了tb_orderlog表。
此时备份出来的数据,是存在问题的。因为备份出来的数据,tb_stock表与tb_order表的数据不一致(有最新操作的订单信息,但是库存数没减)。
那如何来规避这种问题呢? 此时就可以借助于MySQL的全局锁来解决。
对数据库进行进行逻辑备份之前,先对整个数据库加上全局锁,一旦加了全局锁之后,其他的DDL、DML全部都处于阻塞状态,但是可以执行DQL语句,也就是处于只读状态,而数据备份就是查询操作。
那么数据在进行逻辑备份的过程中,数据库中的数据就是不会发生变化的,这样就保证了数据的一致性和完整性。
相关文章
- mysql数据库视图索引_MySQL数据库的视图、索引「建议收藏」
- 指南MySQL数据库购买必备指南(mysql数据库购买)
- MySQL 命令行:一秒钟完成屏幕清洁(mysql命令行清屏)
- MySQL:Unlock the Power of Database Translations(mysql外文翻译)
- MySQL:更新数据库的简单方法(mysql替换内容)
- MySQL 5.1.28:掌控数据库的新级别(mysql5.1.28)
- 重装MySQL服务:恢复系统功能(重启mysql服务)
- MySQL杀死顽固的进程(mysql杀进程)
- 快速入门MySQL,21分钟轻松掌握数据库技能!(21分钟学习mysql)
- MySQL集群技术:提高数据库可用性和性能的利器(mysql集群技术)
- MySQL创建数据库:25步教你轻松上手(mysql创建数据库步骤)
- MySQL数据库表被锁住,怎么办?(mysql数据库表被锁住)
- 阿里云MySQL外网访问:让安全不再成为障碍(阿里云mysql外网访问)
- 使用PHP操作MySQL数据库的基础——mysql类库(mysql类库php)
- IIS 增加了新功能: 支持 MySQL 数据库!(iis支持mysql)
- MySQL中存储BLOB类型数据的实现方式(mysql blob数据)
- MySQL事件了解数据库中的任务调度程序(mysql中事件是什么)
- 用一核CPU加速MySQL服务器性能(1核 跑 mysql)
- 远程连接MySQL如何让未在本机的MySQL也能访问(mysql不在本机)
- MySQL轻松切换数据库,无需使用USE命令(mysql不用use)