`
l4432848
  • 浏览: 255261 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

-mysql-锁机制分为表级锁和行级锁

    博客分类:
  • java
阅读更多

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

mysql锁机制分为表级锁和行级锁 myISAM 引擎不支持事物!

排他锁:

Set Autocommit=0; // 把事物设置成手动事物!

排他锁又称为写锁,简称X锁 排他锁就是不能与其他锁并存,如A事务获取了一行数据的排他锁,事务就不能再获取该行的其他锁 必须等A事物的排他锁结束才能对一行数据进行增删改! mysql InnoDB引擎默认的修改数据语句,update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,如果加排他锁可以使用select ...for update语句

实验1:

下图两个用户都设置了手动事物 实验证明 A 把数据删了 B还能查到 B也要进行commit 提交或者roll回滚才能看到修改后的数据!

image

实验2:

A事物还在执行 B事就对这行数据进行操作 B事物卡住在这里!

image

实验3:

A把sid=1的数据改成了2
然后b要把sid的数据改成5 结果失败了 原因是已经没有sid=1 这条数据了
早就被A修改成2了
如果B的条件是 把sid=2的数据修改成5 那就能操作成功了!

image

实验4:

A把查询出来的数据加上排他锁
B也对这条数据去加排他锁
然后卡住了
要等A执行commit提交 A的排他锁才能结束!

image

下图用工具测试:

排他锁 A用户已经把这个表用排他锁锁住了
B用户去修改数据 然后卡在这里
要等A用户执行Commit 提交 B用户才能执行

image

再看看下图 结果是10
因为A用户把sid改成10
B用户的条件是sid=1
没有此条数据 所以修改不上!

image

共享锁:

Lock in share mode

第一 共享锁不能与排他锁共存在!

第二 共享锁在自动事物的情况下不会发生冲突

第三 共享锁在手动事物的情况下会出现一系列问题!

第四 共享锁可以多个用户对同一条记录锁定!

实验1:

在手动事物的情况下 A先对这一行数据进行了排他锁 然后B用户又去对这行数据进行共享锁 死活不给B用户操作 要等A用户把这个事物处理完才能给B用户进行排他锁! 反之结果还是一样 排他锁和共享锁不能共存!

image

image

实验2:

在手动事物下 A和B 都对这一条数据加上共享锁了 然后A事务要修改 会处于等待状态 他在等B用户来操作 只要B一来操作 系统就会把B用户掐死掉 先来的成功执行 后来的直接被干掉

image

实验3:

A用户对sid=1记录共享锁锁定
B用户对Sid=2记录共享锁锁定
然后A用户去修改sid=2的记录 卡住在那里
等B来操作 B一来操作 B就完蛋了!
这个故事告诉我们 被干掉总是B用户!

image

Sqlyog实验

双方各锁了一条数据

image

A对B锁定的数据进行更改
A处于等待
B对A的数据进行改变
B用户的锁干掉了

image

最后两个人都把事物提交或者回滚
就能查询出真实数据了!

image

后执行的遭殃 直接被干掉了!

image

0
0
分享到:
评论

相关推荐

    MySQL 全局锁、表级锁、行级锁

    在多用户环境中,为了保证数据的一致性和完整性,MySQL 提供了多种锁定机制,包括全局锁、表级锁和行级锁。这些锁机制是数据库事务处理中的核心组成部分,下面我们将详细探讨这些锁的特性和应用场景。 1. **全局锁...

    MySQL中的行级锁、表级锁、页级锁

    MySQL数据库管理系统提供了多种锁机制,包括行级锁、表级锁和页级锁,这些锁的使用和理解对于优化并发性能和避免死锁至关重要。 1. 行级锁(Row-Level Locking) 行级锁是MySQL中最细粒度的锁,它只锁定操作的特定...

    MySQL中的行级锁,表级锁,页级锁1

    其中,行级锁、表级锁和页级锁是MySQL中最为常见的锁类型。本文将详细解析这三种锁机制的特点、应用场景以及优化策略,旨在帮助数据库管理员和开发人员更好地理解MySQL的锁机制,并在实际工作中做出更合理的锁策略...

    MySQL8.0锁机制和事务

    MySQL 8.0 中的锁机制可以分为共享锁和排他锁两大类。共享锁(S)允许拥有共享锁的事务读取该行数据,而排他锁(X)允许拥有排他锁的事务修改或删除该行数据。此外,InnoDB 存储引擎还支持意图锁,意图锁是表级锁,...

    mysql事务与锁机制(存储引擎和锁、MyISAM锁机制、InnoDB锁机制、Next-Key锁、Dead-Lock).docx

    - **InnoDB引擎**:支持行级锁和表级锁。行级锁意味着锁粒度更小,能够并行处理更多的并发操作,从而提高系统的整体吞吐量。InnoDB还引入了多种类型的锁来解决不同场景下的需求,如共享锁、排他锁等。 **3、锁操作...

    MySQL的锁机制解析

    MySQL中的锁大致可以分为两大类:行级锁(Row-Level Locks)和表级锁(Table-Level Locks)。行级锁在粒度上更细,允许更多的并发操作,但开销也相对较大。表级锁则相反,它锁定整个表,提供较低的并发性,但开销较...

    MySQL行级锁、表级锁、页级锁详细介绍

    在MySQL中,有三种主要的锁定级别:行级锁、表级锁和页级锁。 1. **行级锁**:行级锁(Row-Level Locking)是最细粒度的锁,只锁定单个数据行。这使得其他事务可以同时对表中的其他行进行读写操作,从而提高了并发...

    MYSQL锁机制全揭秘

    MySQL支持不同存储引擎采用不同的锁机制,常见的有表级锁、行级锁和页面锁。其中表级锁适用于查询为主的应用,如Web应用;行级锁适用于OLTP系统,其中存在大量并发更新少量不同数据的场景;而页面锁介于表级锁和行级...

    mysql简单简述锁机制

    MySQL的锁主要分为表级锁、行级锁和页面锁,不同存储引擎支持不同的锁类型。 表级锁是MySQL中最简单的锁机制,如MyISAM和MEMORY存储引擎采用的就是这种锁。表级锁在开销、加锁速度以及并发度上具有特定特点:开销小...

    Mysql 锁机制的详细说明

    - InnoDB 支持行级锁和表级锁,默认使用行级锁。 - MyISAM 使用表级锁。 - BDB 使用页面锁,也可用表级锁。 二、行锁 行级锁分为共享锁(读锁)和排他锁(写锁): A. 共享锁: - 允许读取数据,但不允许修改...

    MySQL:锁机制.pdf

    - InnoDB与MyISAM存储引擎的区别:InnoDB支持行级锁和事务,而MyISAM主要支持表级锁。 在使用过程中,应该根据实际的应用场景和性能需求,合理选择存储引擎和锁策略,以达到最优的并发控制效果。对于可能出现的锁争...

    MySQL与Java锁的学习

    MySQL数据库提供了多种锁机制来确保数据的一致性和完整性,主要分为两大类:行级锁和表级锁。 1. **行级锁**:这种类型的锁只锁定操作的数据行,允许其他事务在同一表的不同行上进行操作,提高了并发性。MySQL中的...

    Mysql各种高级操作

    综上所述,锁机制是实现多用户并发访问的基石,无论是MyISAM表的表级锁还是InnoDB表的行级锁,都有其独特的应用场景和特点。了解并掌握这些锁机制,对于优化数据库性能、提高数据一致性具有重要意义。

    MySQL锁的用法之表级锁

    MySQL的锁分为表级锁、页级锁与行级锁。表级锁是MySQL中粒度大的一种锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。常使用的MYISAM与INNODB都支持表级锁定。  表级锁定分为两类,读锁与写锁。读锁是预期...

    MySQL锁的详细介绍

    1.1 从操作的粒度可分为表级锁、行级锁和页级锁。 * 表级锁:锁定整张表,锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在 MyISAM、InnoDB、BDB 等存储引擎中。 * 行级锁:锁定一行数据,锁定粒度最小,发生...

    mysql锁解决并发问题共7页.pdf.zip

    在MySQL中,锁主要分为两大类:行级锁(Row-Level Locks)和表级锁(Table-Level Locks)。行级锁能提供更细粒度的锁定,允许其他事务在同一个表中并发执行读写操作,提高了并发处理能力。而表级锁则会锁定整个表,...

    MySQL的锁机制简介

    MySQL的锁机制是数据库管理系统中用于控制并发操作的重要机制,主要分为三种级别:页级锁、表级锁和行级锁。这些锁机制各有特点,适用于不同的场景。 1. **表级锁**: - 表级锁在MySQL中主要用于MyISAM和MEMORY...

Global site tag (gtag.js) - Google Analytics