网站建设应该学什么软件,亚马逊做deal的网站,网站建设 无法打开asp,泰安公司网站建设价格查询锁是计算机中协调多个进程或线程并发访问资源的一种机制。在数据库中#xff0c;除了传统的计算资源竞争之外#xff0c;数据也是一种提供给许多用户共享的资源#xff0c;如何保证数据并发访问的一致性和有效性是数据库必须解决堆的一个问题#xff0c;锁冲突也是影响数据…锁是计算机中协调多个进程或线程并发访问资源的一种机制。在数据库中除了传统的计算资源竞争之外数据也是一种提供给许多用户共享的资源如何保证数据并发访问的一致性和有效性是数据库必须解决堆的一个问题锁冲突也是影响数据库并发访问性能的一个重要因素。故锁对数据库而言显得极为重要。
目录
1、锁的概述
2、全局锁
3、表级锁
4、行级锁 5、小结 1、锁的概述
MySQL中按照锁的粒度分为三种全局锁表级锁行级锁。 2、全局锁
如果对全库进行数据备份就需要加上全局锁使得处于只读状态从而保证数据的完整性。 为了保证备份的数据一致性需要加上全局锁备份结束之后释放全局锁。 加上全局锁后存在两点问题在主库备份备份期间不得更新一些业务要停止如果通过MySQL主从复制实现读写分离备份期间从库不能执行从主库拷贝过来的二进制日志导致主从延迟。 3、表级锁
表级锁锁定粒度是每张表表级锁主要分为三类表锁元数据锁意向锁。 我们先看一下表锁表锁分为表共享读锁表独占写锁。读锁加锁后当前客户端可读不可写其余客户端可读写的话会被阻塞直至当前客户端释放锁。写锁加锁后当前客户端可读可写其它客户端不可读也不可写会一直阻塞到锁释放。 我们再看一下表级锁中的元数据锁它是为了避免DML语言和DDL语言的冲突在表上有活动事务的时候不可以对元数据进行写入操作执行DML的时候加MDL读锁执行DDL的时候加MDL排他写锁执行DQL语言加MDL写锁。
事务执行过程中不同客户端执行DML和DDL语句锁会冲突避免读写的不一致性。 我们最后再看一下表级锁的意向锁在InnoDB引擎中使用意向锁来避免执行表锁之前对每一行都要进行是否加行锁检查。 客户端需要对表进行加锁的时候不需要逐行检查是否有行锁只需要根据意向锁进行判定是否可以加表锁即可意向锁分为意向共享锁(DQL),意向排他锁(DML). 意向共享锁和表锁共享锁兼容与表锁排他锁互斥。意向排他锁与其它锁都互斥。 4、行级锁
MySQL的行级锁主要分为三类行锁间隙锁临键锁。行锁是锁住单个行记录间隙锁是索引记录的间隙防止其它事务在这个间隙进行insert。临键锁行锁和间隙锁的结合同时锁住数据和数据前面的间隙。 行锁分为共享锁和排它锁共享锁和共享锁是兼容和排他锁冲突排它锁和其它锁都互斥。 针对唯一索引进行检索对已存在的记录进行等值匹配的时候将会自动优化为行锁InnoDB行锁是对索引加索不通过索引检索数据行锁将会升级为表锁。InnoDB使用临界锁进行搜索和索引扫描防止出现幻读。 间隙锁的目的就是防止其它事务插入间隙间隙锁可以共存如果是唯一索引(主键索引)上的等值查询如果更新一条之前不存在的记录会在两条记录之间加上间隙锁此时这个间隙其它客户端不能执行DML操作。 5、小结