首页
学习
活动
专区
圈层
工具
发布

MySQL只改一行数据,锁这么多吗?

导读 这篇文章我想来聊聊 MySQL 的锁是怎么加上的,为啥想聊这个呢?主要是因为业务中我们或多或少都会使用到锁,毕竟锁是保障我们数据安全性的关键法宝。...01 啥时候加 1.1 显示锁 MySQL 的加锁可以分为显示加锁和隐式加锁,显示加锁我们比较好识别的,因为他往往直接体现在 SQL 中,常见的显示加锁语句主要有: ▶︎ select ... for...▶︎ 优化1:索引上的等值查询,给唯一索引加锁的时候,next-key lock 退化为行锁。...首先是 RC 级别,这个级别下的加锁规则是比较简单的,因为只涉及到行锁,首先我们先设计一张表 CREATE TABLE `t_db_lock` ( `id` int(11) NOT NULL,...,由于行锁是加在索引上,因此这时候 a 列相关索引数据上了锁; ▶︎ 但是为啥这时候我更新 id=0 的数据也被阻塞了呢?

60810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    只出现一次的数字

    给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。...使用集合存储数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。...使用哈希表存储每个数字和该数字出现的次数。遍历数组即可得到每个数字出现的次数,并更新哈希表,最后遍历哈希表,得到只出现一次的数字。 使用集合存储数组中出现的所有数字,并计算数组中的元素之和。...由于数组中只有一个元素出现一次,其余元素都出现两次,因此用集合中的元素之和的两倍减去数组中的元素之和,剩下的数就是数组中只出现一次的数字。 上述三种解法都需要额外使用 的空间,其中 是数组长度。...根据性质 3,数组中的全部元素的异或运算结果总是可以写成如下形式: 根据性质 2 和性质 1,上式可化简和计算得到如下结果: 因此,数组中的全部元素的异或运算结果即为数组中只出现一次的数字。

    1.4K10

    MySQL的行转列

    MySQL的行转列操作 在MySQL中,经常会遇到行转列和列转行的操作,今天来看看这种问题的解决办法,先来说说行转列。...MySQL行转列操作 所谓的行转列操作,就是将一个表的行信息转化为列信息,说着可能比较笼统,这里先举个例子,如下: +----+-----------+--------+-------+ | ID...,而表2是将表1的行记录信息(学科、姓名)转化为列信息,并根据不同的user_name进行分组显示。...由于每条记录中只包含当前学科的成绩,其他学科的成绩为0,所以我们使用MAX函数和SUM函数的结果是相同的,但是不能使用AVG函数和MIN函数,这应该很好理解吧。...2 if操作方法 上面的case when操作方法理解了,那么if的操作方法也很好理解,原理是一样的,只不过是把case when的语法转换为if方式,如下: mysql-yeyz 14:12

    14.2K10

    LeetCode,只出现一次的数字

    力扣题目: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗?...解题思路 暴力破解 遍历一次数组,使用哈希表来存储数组中每个元素出现的次数; 然后再遍历这个哈希表,找到只出现一次的数字 func singleNumber(nums []int) int {...任何数和 0 做异或运算,结果仍然是原来的数,即 a⊕0=a。 任何数和其自身做异或运算,结果是 0,即 a⊕a=0。...因为给定的题目指定,确保是一个非空的数组,且有一个出现一次的元素,其余都会出现两次。使用异或运算,我们将所有元素做异或操作,这样相同的元素会消去,最后剩下独一无二的那个元素。...,只使用了题目所提供的数组空间,所以空间复杂度为 O(1)。

    1.3K30

    为什么我只改一行,MySQL却锁了这么多?

    在日常开发中,你是否遇到过这样的“灵异事件”:明明只更新了一行数据,却发现其他完全不相关的插入、更新操作也被阻塞了?甚至引发了死锁?...理解了这套机制,你就能像侦探一样,从一堆阻塞的线程中,精准定位出真正的“元凶”。 一、MySQL的锁到底锁住了什么? 在InnoDB存储引擎中,行锁并不是简单地锁住一行,而是锁住索引上的某个范围。...核心公式:Next-Key Lock=Record Lock(锁住记录本身)+Gap Lock(锁住记录之前的间隙) 这意味着,当你通过某个索引条件去更新数据时,MySQL不仅会锁住满足条件的行,还会锁住该索引值...如果找到前两条满足c=10的记录后,MySQL就会停止扫描。这导致它只锁住到这两条记录为止的范围,而不会继续向后锁住更大的范围。...四、结语 数据库的锁机制是一把双刃剑,它保证了数据的一致性,但也可能成为性能的瓶颈。理解MySQL“只改一行却锁一片”的背后逻辑,能让你在面对慢SQL和死锁报警时,多一份从容,少一份慌张。

    17510

    只出现一次的数字 II

    请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。...示例 1: 输入:nums = [2,2,3,2] 输出:3 示例 2: 输入:nums = [0,1,0,1,0,1,99] 输出:99 思路与算法 我们可以使用哈希映射统计数组中每个元素的出现次数。...对于哈希映射中的每个键值对,键表示一个元素,值表示其出现的次数。 在统计完成后,我们遍历哈希映射即可找出只出现一次的元素。...;                 break;             }         }         return ans;     } }; 复杂度分析 时间复杂度: ,其中 是数组的长度...哈希映射中包含最多 个元素,即需要的空间为 。

    1K10

    只出现一次的数字

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?...位运算入门:参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。...即:0^0=0, 1^0=1, 0^1=1, 1^1=0 异或的特性: 1.恒定律:A ^ 0 = A 2.归零率:A ^ A = 0 3.交换律:A ^ B = B ^ A 4.结合律:(A ^ B)...^ C = A ^ (B ^ C) 异或能做的事: 异或可以快速比较两个值是否相等 a ^ b == 0,效率非常高,比 a - b == 0 高很多。...异或还能在不定义临时变量的情况下,交换两个值 a = a ^ b b = a ^ b // a ^ b ^ b = a ^ 0 = a a = a ^ b // a ^ b ^ a = b ^ 0 =

    81210

    数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。...如果数组中只一个数字是只出现一次的,其他数字都是成双成对出现的,那么我们从头到尾依次异或数组中的每个数字,最终的结果刚好就是那个只出现一次的数字,因为那些成对出现两次的数字全部在异或中抵消了。...那么回到我们的题目,因为有两个只出现一次的数字,所以我们可以试着把原数组分成两个子数组,使得每个数组包含一个只出现一次的数字,而其他数字都成对出现两次。...我们还是从头到尾依次异或数组中的每个数字,那么最终得到的结果就是两个只出现一次的数字异或的结果。...位都为1,第二个子数组中的数组第index位都为0,那么只出现一次的数字将被分配到两个子数组中去,于是每个子数组中只包含一个出现一次的数字,而其他数字都出现两次。

    1.7K20
    领券