关于网站备案前置审批的相关说明 吉林,北京建设管理有限公司官网,怎么创造网站,软件开发主要几个步骤Mysql中的锁机制主要是为了保证数据的一致性和完整性#xff0c;在并发的情况下起着至关重要的作用。其中锁的类型主要是分为以下几种#xff1a;
按照粒度分类
全局锁#xff1a;对于整个数据库实例进行枷锁#xff0c;加锁后整个实例就处于只读的状态。局锁通常用于需要…Mysql中的锁机制主要是为了保证数据的一致性和完整性在并发的情况下起着至关重要的作用。其中锁的类型主要是分为以下几种
按照粒度分类
全局锁对于整个数据库实例进行枷锁加锁后整个实例就处于只读的状态。局锁通常用于需要执行一些需要长时间运行或对整个数据库进行变更的操作如备份、恢复等
表级锁对于整个表进行枷锁阻止其他食物对该表进行写操作可能允许读操作具体取决于锁的类型。表锁粒度大开销小但并发度低。表锁分为表读锁和表写锁。
行级锁对数据库表中的单独一行进行锁定相比于表级锁行级锁力度更小因此在处理高并发事务的时候能提供更好的并发性能
页级锁在页的力度上进行锁定锁定的数据资源比行级锁要多因为一个页中有多个行记录。页锁的开销介于表锁和行锁之间并发度一般。但需要注意的是MySQL中只有BDB存储引擎支持页锁
按照模式分类
乐观锁假设在多个事务同时访问同一条数据时冲突发生的概率较低因此在操作数据时不会立即进行锁定而是在提交数据更改时检查是否有其他事务修改了这条数据。如果没有就提交更改否则就回滚事务。乐观锁在MySQL中没有内置的实现但可以通过编程技巧如版本号或时间戳来实现
悲观锁假设并发操作时会发生冲突因此在操作期间持有锁来避免冲突。MySQL中的行级锁就是一种悲观锁的实现方式
按照属性分类
共享锁也称为读锁允许多个事务同时读取同一个资源但是不可以进行写操作 SELECT ... LOCK IN SHARE MODE
排他锁也称为写锁阻止其他事务对已锁定资源进行读写操作 SELECT ... FOR UPDATE
其他锁类型
记录锁记录锁是对索引记录的锁注意它是针对索引记录即它只锁定记录这一行数据
间隙锁锁定两个值之间的空隙防止其他事务在间隙中插入或删除记录。它的存在可以解决幻读问题需要注意间隙锁是在可重复读隔离级别下才会生效
之所以出现幻读的问题是因为记录之间存在缝隙用户可以往这些缝隙中插入数据这就导致了幻读问题。所以我们将之间的间隙锁住就可以防止幻读的问题的
临键锁是间隙锁加记录锁的组合既想锁定一行又想锁定行之间的记录其他事务既不能更改锁定的数据也不能插入锁的范围是左开右闭
意向锁用于协调事务间的加锁操作以避免冲突和死锁的发生。例如事务 A 加锁了 Users 表中的一行数据行锁而事务 B 要对整个 Users 表进行加锁表锁那么这个时候如果没有意向锁那事务 B 就会加锁成功了。而事务 B 如果加锁成功的话那么它是可以对表中的任意数据行进行操作的包括事务 A 加锁的那行数据所以这个时候就发生了锁冲突。在事务 A 添加行锁的时候先添加意向锁而事务 B 在添加表锁的时候先判断一下意向锁如果有意向锁了它就不能加表锁了这样避免了锁冲突提升了加锁判断的效率
意向锁主要是分为两种 意向共享锁Intention Shared lockIS表示在某个资源上设置共享锁。也就是读锁用于读取数据的操作允许多个事务同时持有共享锁不互斥。 意向排他锁Intention Exclusive lockIX表示在某个资源上设置排他锁。也就是写锁用于修改和更新数据操作并且同一时间只能由一个事务持有不能和其他事务共同持有具有互斥性和排他性