<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>MySQL on </title>
    <link>http://blog.chuckchan.top/tags/mysql/</link>
    <description>Recent content in MySQL on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <copyright>© 2026 Chuck Chan</copyright>
    <lastBuildDate>Mon, 27 Feb 2023 00:00:00 +0000</lastBuildDate><atom:link href="http://blog.chuckchan.top/tags/mysql/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>MySQL之explain</title>
      <link>http://blog.chuckchan.top/posts/middleware/mysql/mysql%E4%B9%8Bexplain/</link>
      <pubDate>Mon, 27 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>http://blog.chuckchan.top/posts/middleware/mysql/mysql%E4%B9%8Bexplain/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;Explain&#xA;    &lt;div id=&#34;explain&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#explain&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;简介&#xA;    &lt;div id=&#34;简介&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e7%ae%80%e4%bb%8b&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;MySQL 提供了一个 &lt;strong&gt;EXPALIN&lt;/strong&gt; 命令，可以用于对 &lt;strong&gt;SELECT 语句&lt;/strong&gt; 的执行计划进行分析，并详细的输出分析结果，供开发人员进行针对性的优化。&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;字段介绍&#xA;    &lt;div id=&#34;字段介绍&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%ad%97%e6%ae%b5%e4%bb%8b%e7%bb%8d&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;u&gt;id&lt;/u&gt;: SELECT查询序列号，即为sql语句执行的顺序&lt;/li&gt;&#xA;&lt;li&gt;&lt;u&gt;select_type&lt;/u&gt;:  SELECT的类型，他有以下几种类型：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;simple&lt;/em&gt;: 最简单的select，表示没有union与子查询&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;primary&lt;/em&gt;: 在有子查询的语句中，外面的那一层select即为primary&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;union&lt;/em&gt;: union查询语句的第二个语句，即为union&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;union result&lt;/em&gt;: union语句的结果&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;u&gt;table&lt;/u&gt;: 所用到的表&lt;/li&gt;&#xA;&lt;li&gt;&lt;u&gt;type&lt;/u&gt;: 连接类型，后面再详细介绍&lt;/li&gt;&#xA;&lt;li&gt;&lt;u&gt;possible_keys&lt;/u&gt;: 可能使用到的索引&lt;/li&gt;&#xA;&lt;li&gt;&lt;u&gt;key&lt;/u&gt;: 实际选择的索引&lt;/li&gt;&#xA;&lt;li&gt;&lt;u&gt;key_len&lt;/u&gt;: 使用的索引长度&lt;/li&gt;&#xA;&lt;li&gt;&lt;u&gt;ref&lt;/u&gt;: 索引的哪一列被使用了&lt;/li&gt;&#xA;&lt;li&gt;&lt;u&gt;rows&lt;/u&gt;: 估计要扫描的行，数字越大select的效率越低&lt;/li&gt;&#xA;&lt;li&gt;&lt;u&gt;extra&lt;/u&gt;: 额外信息，后面再详细介绍&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;type详解&#xA;    &lt;div id=&#34;type详解&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#type%e8%af%a6%e8%a7%a3&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;type表示SQL语句对表的访问方式（MySQL在表中找到所需行的方式），又称访问类型，通常用type的值来判断SQL语句是否使用到索引。type的值有以下几种，由好到差依次是：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>MySQL之mvcc</title>
      <link>http://blog.chuckchan.top/posts/middleware/mysql/mysql%E4%B9%8Bmvcc/</link>
      <pubDate>Sun, 04 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>http://blog.chuckchan.top/posts/middleware/mysql/mysql%E4%B9%8Bmvcc/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;MVCC&#xA;    &lt;div id=&#34;mvcc&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#mvcc&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&#xA;&lt;h5 class=&#34;relative group&#34;&gt;&lt;strong&gt;概念&lt;/strong&gt;&#xA;    &lt;div id=&#34;概念&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%a6%82%e5%bf%b5&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h5&gt;&#xA;&lt;p&gt;MVCC 的英文全称是 Multiversion Concurrency Control ，中文意思是多版本并发控制技术。原理是，通过数据行的多个版本管理来实现数据库的并发控制，简单来说就是保存数据的历史版本。可以通过比较版本号决定数据是否显示出来。读取数据的时候不需要加锁可以保证事务的隔离效果。&lt;/p&gt;&#xA;&lt;p&gt;MVCC是如何实现的？&lt;/p&gt;&#xA;&lt;p&gt;我们需要先了解两个知识：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Read View 中四个字段作用；&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;聚簇索引记录中两个跟事务有关的隐藏列；&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;em&gt;隐藏列&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;InnoDB 里面每个事务有一个唯一的事务 ID，叫作 transaction id。它是在事务开始的时候向 InnoDB 的事务系统申请的，是按申请顺序严格递增的。而每行数据也都是有多个版本的。每次事务更新数据的时候，都会生成一个新的数据版本，并且把 transaction id 赋值给这个数据版本的事务 ID，记为 row trx_id。同时，旧的数据版本要保留，并且在新的数据版本中，能够有信息可以直接拿到它。也就是说，数据表中的一行记录，其实可能有多个版本 (row)，每个版本有自己的 row trx_id。每个版本之间可以用回滚指针相连接。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure&gt;&lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;&#34;&#xA;    src=&#34;http://storage.chuckchan.top/uploads/2022-04-08-15-31-58-image.png&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;对于使用 InnoDB 存储引擎的数据库表，它的聚簇索引记录中都包含下面两个隐藏列：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;trx_id，当一个事务对某条聚簇索引记录进行改动时，就会&lt;strong&gt;把该事务的事务 id 记录在 trx_id 隐藏列里&lt;/strong&gt;；&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;roll_pointer，每次对某条聚簇索引记录进行改动时，都会把旧版本的记录写入到 undo 日志中，然后&lt;strong&gt;这个隐藏列是个指针，指向每一个旧版本记录&lt;/strong&gt;，于是就可以通过它找到修改前的记录。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>MySQL之死锁</title>
      <link>http://blog.chuckchan.top/posts/middleware/mysql/mysql%E4%B9%8B%E6%AD%BB%E9%94%81/</link>
      <pubDate>Sun, 04 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>http://blog.chuckchan.top/posts/middleware/mysql/mysql%E4%B9%8B%E6%AD%BB%E9%94%81/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;死锁&#xA;    &lt;div id=&#34;死锁&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%ad%bb%e9%94%81&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;概念&#xA;    &lt;div id=&#34;概念&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%a6%82%e5%bf%b5&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;死锁是并发系统中常见的问题，同样也会出现在数据库MySQL的并发读写请求场景中。当两个及以上的事务，双方都在等待对方释放已经持有的锁或因为加锁顺序不一致造成循环等待锁资源，就会出现“死锁”。常见的报错信息为 &lt;code&gt;Deadlock found when trying to get lock...&lt;/code&gt;。&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;检测语句&#xA;    &lt;div id=&#34;检测语句&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%a3%80%e6%b5%8b%e8%af%ad%e5%8f%a5&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;可以使用下面这条命令来查看MySQL最近的一次死锁日志：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;show&lt;/span&gt; engine innodb status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;查看当前执行的事务：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; information_schema.innodb_trx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;查看当正在等锁的事务：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;from&lt;/span&gt; information_schema.innodb_lock_waits&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;场景分析&#xA;    &lt;div id=&#34;场景分析&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%9c%ba%e6%99%af%e5%88%86%e6%9e%90&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;sql准备：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>MySQL之索引调优</title>
      <link>http://blog.chuckchan.top/posts/middleware/mysql/mysql%E4%B9%8B%E7%B4%A2%E5%BC%95%E8%B0%83%E4%BC%98/</link>
      <pubDate>Sun, 04 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>http://blog.chuckchan.top/posts/middleware/mysql/mysql%E4%B9%8B%E7%B4%A2%E5%BC%95%E8%B0%83%E4%BC%98/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;索引&#xA;    &lt;div id=&#34;索引&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e7%b4%a2%e5%bc%95&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;索引是什么？&#xA;    &lt;div id=&#34;索引是什么&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e7%b4%a2%e5%bc%95%e6%98%af%e4%bb%80%e4%b9%88&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;索引是提升查询速度的一种数据结构&lt;/strong&gt;。索引之所以能提升查询速度，在于它在插入时对数据进行了排序（显而易见，它的缺点是影响插入或者更新的性能）。InnoDB 存储引擎支持的索引有 B+ 树索引、全文索引、R 树索引。这里讲使用最广泛的 B+ 树索引。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>MySQL之next-key lock</title>
      <link>http://blog.chuckchan.top/posts/middleware/mysql/mysql%E4%B9%8Bnext-key-lock/</link>
      <pubDate>Mon, 24 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>http://blog.chuckchan.top/posts/middleware/mysql/mysql%E4%B9%8Bnext-key-lock/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;Next-key lock&#xA;    &lt;div id=&#34;next-key-lock&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#next-key-lock&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;Innodb 引擎为了解决「可重复读」隔离级别使用「当前读」而造成的幻读问题，就引出了 next-key 锁&lt;/strong&gt;，就是记录锁和间隙锁的组合。这里强调**「当前读」&lt;strong&gt;，是因为在&lt;/strong&gt;「快照读」&lt;strong&gt;的情况下，由mvcc来保证不会产生幻读。mvcc相关的内容具体可以参考&lt;a href=&#34;https://github.com/chuckchann/nine-legged-essay-notes/blob/master/%E4%B9%9D%E8%82%A1%E6%96%87%E4%B9%8BMySQL/MySQL%E4%B9%8Bmvcc.md&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;另一篇文章&lt;/a&gt;。这里只讨论&lt;/strong&gt;「当前读」&lt;strong&gt;的情况。以下内容全部基于&lt;/strong&gt;「可重复读」隔离级别**。&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;记录锁&amp;amp;间隙锁&#xA;    &lt;div id=&#34;记录锁间隙锁&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e8%ae%b0%e5%bd%95%e9%94%81%e9%97%b4%e9%9a%99%e9%94%81&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;记录锁，锁的是记录本身；&lt;/li&gt;&#xA;&lt;li&gt;间隙锁，锁的就是两个值之间的空隙，以防止其他事务在这个空隙间插入新的数据，从而避免幻读现象。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;加锁规则&#xA;    &lt;div id=&#34;加锁规则&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%8a%a0%e9%94%81%e8%a7%84%e5%88%99&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;对记录加锁时，&lt;strong&gt;加锁的基本单位是 next-key lock&lt;/strong&gt;，它是由记录锁和间隙锁组合而成的，&lt;strong&gt;next-key lock 是前开后闭区间，而间隙锁是前开后开区间&lt;/strong&gt;。但是，next-key lock 在一些场景下会退化成记录锁或间隙锁。另外，文章后面提到的&lt;strong&gt;next-key lock、间隙锁、记录锁都是加在索引上的，而不是加在数据行上的&lt;/strong&gt;。&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;场景分析&#xA;    &lt;div id=&#34;场景分析&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%9c%ba%e6%99%af%e5%88%86%e6%9e%90&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;先准备测试表，其中id为主键（&lt;u&gt;唯一索引&lt;/u&gt;），age上有一个&lt;u&gt;普通索引&lt;/u&gt;，name上没有索引&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
