自建网站免费教程wordpress导航页面模板下载
2026/4/6 5:48:54 网站建设 项目流程
自建网站免费教程,wordpress导航页面模板下载,hexo wordpress 主题制作,苏州网站制作 网站锁是计算机协调多个进程或线程并发访问某一资源的机制#xff0c;在数据库中除了传统的计算机资源(CPU、RAM、I/O)的争用以外#xff0c;数据也是一种供许多用户共享的资源#xff0c;如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题#xff0c;锁冲突…锁是计算机协调多个进程或线程并发访问某一资源的机制在数据库中除了传统的计算机资源(CPU、RAM、I/O)的争用以外数据也是一种供许多用户共享的资源如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题锁冲突也是影响数据库并发访问性能的一个重要因素从这个角度来说锁对数据库而已尤为重要也更加复杂。按照锁的粒度细分对于MySQL中的锁主要分为以下三类1全局锁锁定数据库中的所有表2表级锁每次操作锁住整张表3行级锁每次操作锁住对应的行数据目录全局锁表级锁行级锁全局锁全局锁就是对整个数据库实例加锁加锁后整个实例就处于就读状态后续的DML的写语句即DDI语句已经更新操作的事务提交语句都将被阻塞其典型的使用场景是做全库的逻辑备份对所有表进行锁定从而获得一致性视图保证数据的完整性。如下当我们进行数据备份的时候不加全局锁的情况下就会导致在备份的时候还会发生数据的插入操作导致前后数据不一致我们在进行数据备份的时候可通过如下步骤进行操作在添加全局锁之后整个数据库只能读不能写当数据库备份完毕之后我们再释放锁即可接下来我们演示如何添加全局锁并进行数据备份操作如下所示添加全局锁通过执行如下命令来进行添加全局锁操作flush tables with read lock;如下代码当我们设置全局锁的时候查询操作正常执行但数据更新就不能被执行了数据库备份接下来我们开始进行数据库备份mysqldump并不是sql命令而是一个工具这里我们直接在cmd终端允许如下命令即可-h是地址-u是用户名-p是密码后面的是要备份的数据库名称路径是要保存的地址mysqldump -h localhost -uroot -p123456 mysql_test D:/mysql_test.sql如下我们可以看到我们的数据库已经备份成功了来到我们保存的地址通过文件打开可以看到我们的数据已经成功被备份出来了释放数据库数据成功备份之后我们要执行如下命令对数据库进行释放全局锁unlock tables;全局锁特点数据库中添加全局锁是一个比较重的操作存在以下问题1如果在主库上备份那么在备份期间都不能执行更新操作业务基本上就停摆了2如果在库上备份那么在备份期间从库不能执行主库同步过来的二进制日志(binlog)会导致主从延迟在InnoDB引擎中我们可以在备份时添加参数 --single-transaction 参数来完成不加锁的一致性数据备份如下所示mysqldump --single-transaction -h localhost -uroot -p123456 mysql_test D:/mysql_test02.sql表级锁表级锁每次操作锁住整张表锁定粒度大发生锁冲突的概率最高并发度最低应用在MySQL、InnoDB、BDB等存储引擎中对于表级锁主要分为以下三类1表锁对于表锁主要分为两类表共享读锁(read lock)表独占写锁(write lock)其语法如下所示-- 加锁 lock tables 表名... read/write -- 释放锁 unlock tables / 客户端锻炼连接读锁当我们进行读锁的时候客户1对数据库执行了读锁操作那其只能读不能写客户2也是只能读不能写的如下所示写锁当我们进行写锁的时候客户1对数据库进行了写锁操作那其既能读又能写但客户2却是不能进行读和写的操作如下所示这里我们拿写锁进行演示如下我们开了两个查询控制台当作两个客户在使用客户1执行了写锁操作之后客户2的读写都不能使用了只有当客户1释放表锁之后客户2才能正常使用如下2元数据锁(meta data lockMDL)MDL加锁过程是系统自动控制无需显示使用在访问一张表的时候会自动加上MDL锁主要作用是维护表元数据的数据一致性在表上有活动事务的时候不可以对元数据进行写入操作为了避免DML和DDL冲突保证读写的正确性。在MySQL5.5中引入MDL当对一张表进行增删改查的时候加MDL读锁(共享)当对表结构进行变更操作的时候加MDL写锁(排他)如下表所示对于SQL锁类型说明lock tables xxx read/writeSHARED_READ_ONLY / SHARED_NO_READ_WRITE-select、select…lock in share modeSHARED_READ与SHARED_READ、SHARED_WRITE兼容与EXCLUSIVE互斥insert、update、delete、select…for updateSHARED_WRITE与SHARED_READ、SHARED_WRITE兼容与EXCLUSIVE互斥alter table…EXCLUSIVE与其他的MDL都互斥3意向锁为了避免DML在执行时加的行锁与表锁的冲突在InnoDB中引入了意向锁使得表锁不用检查每行数据是否加锁使用意向锁来减少表锁的检查如下所示当我们要对一张表加上表锁的时候需要遍历整张表中是否加上了行锁如果加上了行锁再加表锁就可能产生冲突了对于意向锁主要分为以下两种1意向共享锁ISselect … lock in share mode 添加与表锁共享锁(read)兼容与表锁排它锁(write)互斥2意向排他锁IXinsert、update、delete、select…for update添加与表锁共享锁(read)及排它锁(write)都互斥意向锁之间不会互斥。可以通过以下SQL查看意向锁及行锁的加锁情况select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;行级锁行级锁每次操作锁住对应的行数据锁定粒度最小发生锁冲突的概率最低并发度最高应用在InnoDB存储引擎中InnoDB的数据是基于索引组织的行锁是通过对索引上的索引项加锁来实现的而不是对记录加的锁。对于行级锁主要分为以下三类行锁(recordl lock)锁定单个行记录的锁防止其他事务对此行进行update和delete在rc、rr隔离级别下都支持如下所示InnoDB实现了以下两种类型的行锁1共享锁S允许一个事务去读一行阻止其他事务获得相同数据集的排它锁。2排他锁X允许获取排他锁的事务更新数据阻止其他事务获得相同数据集的共享锁和排他锁。当我们正常进行增删改查的时候所加的行锁的类型如下所示默认情况下InnoDB在REPEATABLEREAD事务隔离级别运行InnoDB使用next-key锁进行搜索和索引扫描以防止幻读针对唯一索引进行检索时对已存在的记录进行等值匹配时将会自动优化为行锁InnoDB的行锁是针对于索引加的锁不通过索引条件检索数据那么InnoDB将对表中的所有记录加锁此时就会升级为表锁。间隙锁(gap lock)锁定索引记录间隙(不含该记录)确保索引记录间隙不变防止其他事务在这个间隙进行insert产生幻读在rr隔离级别下都支持如下所示默认情况下InnoDB在REPEATABLEREAD事务隔离级别运行InnoDB使用next-key锁进行搜索和索引引扫描以防止幻读1索引上的等值查询(唯一索引)给不存在的记录加锁时优化为间隙锁。2索引上的等值查询(普通索引)向右遍历时最后一个值不满足查询需求时next-key lock 退化为间隙锁。3索引上的范围查询(唯一索引)–会访问到不满足条件的第一个值为止。注意间隙锁唯一目的是防止其他事务插入间隙。间隙锁可以共存一个事务采用的间隙锁不会阻止另一个事务在同一间隙上采用间隙锁。临键锁(next-key lock)行锁和间隙锁组合同时锁住数据并锁住数据前面的间隙gap在rr隔离级别下支持如下所示

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询