<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>ZhouZhou’s Blog</title>
        <link>https://zzzero.site/</link>
        <description>Welcome!</description>
        <lastBuildDate>Sat, 23 Aug 2025 16:32:38 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <copyright>All rights reserved 2025, ZhouZhou</copyright>
        <item>
            <title><![CDATA[py做数据预处理相关]]></title>
            <link>https://zzzero.site/article/258fcf41-935f-80aa-8f04-d7c1aec63061</link>
            <guid>https://zzzero.site/article/258fcf41-935f-80aa-8f04-d7c1aec63061</guid>
            <pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[数据预处理是怎么做的？python的包管理工具。]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-258fcf41935f80aa8f04d7c1aec63061"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-sync-block notion-block-258fcf41935f802386c6cd669cf57209"><blockquote class="notion-quote notion-block-1b7fcf41935f80759344efe77c0ba5f3"><div>numpy：数学函数库
pandas：表格数据处理相关</div></blockquote><details class="notion-toggle notion-block-1b7fcf41935f80868064c546ff837504"><summary>conda环境相关</summary><div><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f8069841aeb8e41c1b65a"><li><b>查看conda创建的所有虚拟环境</b></li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f8069841aeb8e41c1b65a"></ul></ul><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f8028a72cfc992a23335f"><li>创建环境</li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f8028a72cfc992a23335f"></ul></ul><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f801ebeb6c3c306f69598"><li>激活环境</li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f801ebeb6c3c306f69598"></ul></ul><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f801580bbee6f9a3489ac"><li>复制环境</li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f801580bbee6f9a3489ac"></ul></ul><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f800cae8cc41ac9e9465f"><li>  删除环境</li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f800cae8cc41ac9e9465f"></ul></ul><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f806dba67f2c9a6c03f43"><li>切换环境</li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f806dba67f2c9a6c03f43"></ul></ul><ul class="notion-list notion-list-disc notion-block-1bcfcf41935f80528f96e7c23341f047"><li>退出环境</li><ul class="notion-list notion-list-disc notion-block-1bcfcf41935f80528f96e7c23341f047"></ul></ul></div></details><details class="notion-toggle notion-block-1b7fcf41935f801f89d4c005673d86fb"><summary>conda包管理相关</summary><div><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f800587e0e77027b9869c"><li>安装包</li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f800587e0e77027b9869c"></ul></ul><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f8039b34eff342a9764a1"><li>查看已经安装的包</li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f8039b34eff342a9764a1"></ul></ul><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f803a9323df17453e7e94"><li>卸载包</li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f803a9323df17453e7e94"></ul></ul><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f806a8da4d02d02f84d9c"><li>更新包</li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f806a8da4d02d02f84d9c"></ul></ul><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f802aab0ad415af618d4e"><li>搜索包</li><ul class="notion-list notion-list-disc notion-block-1b7fcf41935f802aab0ad415af618d4e"></ul></ul></div></details><details class="notion-toggle notion-block-1b7fcf41935f80a69ed5cee77d0001c8"><summary>数据处理相关</summary><div><details class="notion-toggle notion-block-1b7fcf41935f8037a1c0c647b2690cfb"><summary>读取CSV</summary><div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-1b7fcf41935f808b9312dfd9ccbf208d"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Adc4c4dd2-b4a5-46f6-acb9-1f7088f48d85%3Aimage.png?table=block&amp;id=1b7fcf41-935f-808b-9312-dfd9ccbf208d&amp;t=1b7fcf41-935f-808b-9312-dfd9ccbf208d" alt="notion image" loading="lazy" decoding="async"/></div></figure></div></details><details class="notion-toggle notion-block-1b7fcf41935f8011bef3cee9d9167469"><summary>处理重复数据</summary><div><div class="notion-row notion-block-1b7fcf41935f80cbad23ea28b14edb32"><div class="notion-column notion-block-1b7fcf41935f80b7b6abcf05003d892b" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-1b7fcf41935f808e8a88d443689d26de"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A114deaaa-1ecb-446e-a002-6711248a6c59%3Aimage.png?table=block&amp;id=1b7fcf41-935f-808e-8a88-d443689d26de&amp;t=1b7fcf41-935f-808e-8a88-d443689d26de" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div><div class="notion-column notion-block-1b7fcf41935f800c8c0ddea18fafb8f8" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-1b7fcf41935f80df978bc3ffbe1771f5"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Af91ca4da-80e6-4a84-8820-2ce2952e62e5%3Aimage.png?table=block&amp;id=1b7fcf41-935f-80df-978b-c3ffbe1771f5&amp;t=1b7fcf41-935f-80df-978b-c3ffbe1771f5" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div></div></div></details><details class="notion-toggle notion-block-1b7fcf41935f8092a7a9fa788b6e32a7"><summary>敏感数据转换</summary><div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-1b7fcf41935f80f6a357cd877bd4159f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A0b18169c-d685-4f65-a1c1-85b5b78c568c%3Aimage.png?table=block&amp;id=1b7fcf41-935f-80f6-a357-cd877bd4159f&amp;t=1b7fcf41-935f-80f6-a357-cd877bd4159f" alt="notion image" loading="lazy" decoding="async"/></div></figure></div></details><details class="notion-toggle notion-block-1b7fcf41935f803399ddcd3fed18be84"><summary>枚举值类型转换</summary><div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-1b7fcf41935f80fe9c48c8351f774b88"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:528px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ab9cfed9d-d706-4d0d-ad6a-60a7a5c6abfe%3Aimage.png?table=block&amp;id=1b7fcf41-935f-80fe-9c48-c8351f774b88&amp;t=1b7fcf41-935f-80fe-9c48-c8351f774b88" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-blank notion-block-1b7fcf41935f80449bf1ede3eb471888"> </div></div></details><details class="notion-toggle notion-block-1b7fcf41935f80e39aeaf413f5dd8402"><summary>日期格式化</summary><div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-1b7fcf41935f804a8f6ff76eb7788f37"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A9c0748b7-c57b-40f6-8c78-866003f9e846%3Aimage.png?table=block&amp;id=1b7fcf41-935f-804a-8f6f-f76eb7788f37&amp;t=1b7fcf41-935f-804a-8f6f-f76eb7788f37" alt="notion image" loading="lazy" decoding="async"/></div></figure></div></details><details class="notion-toggle notion-block-1b7fcf41935f8013b391fc8579015e9d"><summary>数据导出</summary><div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-1b7fcf41935f802392f7f00e66cfe625"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:432px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A2e60db66-f943-4362-8dbf-f18b62d58217%3Aimage.png?table=block&amp;id=1b7fcf41-935f-8023-92f7-f00e66cfe625&amp;t=1b7fcf41-935f-8023-92f7-f00e66cfe625" alt="notion image" loading="lazy" decoding="async"/></div></figure></div></details><div class="notion-blank notion-block-1b7fcf41935f80d8b89bd9440083cc5c"> </div></div></details><div class="notion-blank notion-block-1bcfcf41935f804c9d16eb8255f60f12"> </div></div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[docker总结]]></title>
            <link>https://zzzero.site/article/257fcf41-935f-80e3-936d-cba50c61f342</link>
            <guid>https://zzzero.site/article/257fcf41-935f-80e3-936d-cba50c61f342</guid>
            <pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[docker是什么？docker与传统虚拟机有什么不同？]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-257fcf41935f80e3936dcba50c61f342"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-sync-block notion-block-257fcf41935f80e6aaa2c2bec9477390"><a class="notion-page-link notion-block-1b3fcf41935f814fbce7eb0c39ac9d47" href="/1b3fcf41935f814fbce7eb0c39ac9d47"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="docker和虚拟机的区别" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">docker和虚拟机的区别</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f8132b541ddfc3c7742d5" href="/1b3fcf41935f8132b541ddfc3c7742d5"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="docker学习路线" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">docker学习路线</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f811c8d93f66ced3680a8" href="/1b3fcf41935f811c8d93f66ced3680a8"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="ARM-centos上安装docker" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">ARM-centos上安装docker</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f81dc9936dd199b32443e" href="/1b3fcf41935f81dc9936dd199b32443e"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="2.docker为什么会出现" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">2.docker为什么会出现</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f81b2ba25ed4e18401a09" href="/1b3fcf41935f81b2ba25ed4e18401a09"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="3.docker需要知道的知识点" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">3.docker需要知道的知识点</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f81eeac71fd3a3e78985b" href="/1b3fcf41935f81eeac71fd3a3e78985b"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="4.docker能干嘛" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">4.docker能干嘛</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f81b080f5e9b12c1d4e82" href="/1b3fcf41935f81b080f5e9b12c1d4e82"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="5.容器镜像仓库" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">5.容器镜像仓库</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f81dc928ccb70bbfaf475" href="/1b3fcf41935f81dc928ccb70bbfaf475"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="7.docker run过程与docker原理" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">7.docker run过程与docker原理</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f81bb9c63eebb49476df9" href="/1b3fcf41935f81bb9c63eebb49476df9"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="8.docker常用命令的运行" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">8.docker常用命令的运行</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f81d789e8c0151f1a3ebb" href="/1b3fcf41935f81d789e8c0151f1a3ebb"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="9.容器内容和宿主机双向更新" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">9.容器内容和宿主机双向更新</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f81dda478c2d46477d44e" href="/1b3fcf41935f81dda478c2d46477d44e"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="10docker部署练习" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">10docker部署练习</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f81749e5bcb0ab6577643" href="/1b3fcf41935f81749e5bcb0ab6577643"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="11可视化面板的安装" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">11可视化面板的安装</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f81608214dfbe12d66ec0" href="/1b3fcf41935f81608214dfbe12d66ec0"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="12docker的联合文件系统" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">12docker的联合文件系统</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f811fa360e19222b57961" href="/1b3fcf41935f811fa360e19222b57961"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="13docker镜像发布" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">13docker镜像发布</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f8178bd8cf1d76e9497c3" href="/1b3fcf41935f8178bd8cf1d76e9497c3"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="14容器数据卷" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">14容器数据卷</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f819f9459e4ba1e8c0890" href="/1b3fcf41935f819f9459e4ba1e8c0890"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="15.具名挂载和匿名挂载" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">15.具名挂载和匿名挂载</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f8181ae27fdde6de66657" href="/1b3fcf41935f8181ae27fdde6de66657"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="16.数据卷容器" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">16.数据卷容器</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f8123ad2feff3ff07ed2a" href="/1b3fcf41935f8123ad2feff3ff07ed2a"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="17. Dockerfile" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">17. Dockerfile</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f811298ebfcd340898d85" href="/1b3fcf41935f811298ebfcd340898d85"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="18实例.利用dockerfile构建tomcat镜像" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">18实例.利用dockerfile构建tomcat镜像</span></span></a><a class="notion-page-link notion-block-1b3fcf41935f8154bb27ebcd95f49510" href="/1b3fcf41935f8154bb27ebcd95f49510"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="19docker网络" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">19docker网络</span></span></a><div class="notion-blank notion-block-257fcf41935f80f88a2aed4d22454061"> </div><div class="notion-blank notion-block-1b3fcf41935f8139b3def3356af6ce8d"> </div></div><div class="notion-blank notion-block-257fcf41935f8020853af4afcb5b98c4"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[粗略了解MySQL锁]]></title>
            <link>https://zzzero.site/article/256fcf41-935f-80cb-b789-c5bbd23801f0</link>
            <guid>https://zzzero.site/article/256fcf41-935f-80cb-b789-c5bbd23801f0</guid>
            <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[MySQL多用户如何协调？]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-256fcf41935f80cbb789c5bbd23801f0"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-sync-block notion-block-256fcf41935f80108068cc17797da489"><div class="notion-text notion-block-256fcf41935f802c9f75c79f0063f205">增删改 都会加锁，查不会（通过MVCC实现）</div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-256fcf41935f807bb98fdd72087aa0e7" data-id="256fcf41935f807bb98fdd72087aa0e7"><span><div id="256fcf41935f807bb98fdd72087aa0e7" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f807bb98fdd72087aa0e7" title="1. 全局锁"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1. 全局锁</span></span></h2><ul class="notion-list notion-list-disc notion-block-256fcf41935f807d8451cad4298d86eb"><li>语句</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f807d8451cad4298d86eb"></ul></ul><div class="notion-blank notion-block-256fcf41935f80cd85e3cb5c8baac9a6"> </div><ul class="notion-list notion-list-disc notion-block-256fcf41935f8052ad14d6bb6b730cf7"><li>效果</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f8052ad14d6bb6b730cf7"><div class="notion-text notion-block-256fcf41935f80e28c05f0d03714bb03">执行后，<b>整个数据库就处于只读状态了</b></div></ul></ul><div class="notion-blank notion-block-256fcf41935f806e9e04fc7dc4368ce0"> </div><ul class="notion-list notion-list-disc notion-block-256fcf41935f8097a0c6c48dd9f26c2a"><li>目的</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f8097a0c6c48dd9f26c2a"><div class="notion-text notion-block-256fcf41935f80f4b063e7c8db2c4ddf">这个库的全库逻辑备份</div></ul></ul><div class="notion-blank notion-block-256fcf41935f80e1a18dd3633a2abf07"> </div><ul class="notion-list notion-list-disc notion-block-256fcf41935f80388756ff9580077056"><li>加全局锁实现全库逻辑备份局限性</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f80388756ff9580077056"><div class="notion-text notion-block-256fcf41935f8081bcfedbfb00ddb6d2">影响业务连续性。因为全库只读。</div></ul></ul><div class="notion-blank notion-block-256fcf41935f809da37af895b9dc9fdb"> </div><ul class="notion-list notion-list-disc notion-block-256fcf41935f801ab54ae3b897fe16d7"><li>实现全库逻辑备份的另一种方式</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f801ab54ae3b897fe16d7"><div class="notion-text notion-block-256fcf41935f807292eec68f18992f89">那么在备份数据库之前先开启事务，会先创建 Read View，然后整个事务执行期间都在用这个 Read View，而且由于 MVCC 的支持，<b>备份期间业务依然可以对数据进行更新操作。</b></div></ul></ul><div class="notion-blank notion-block-256fcf41935f806bba33ffd2f3dce874"> </div><div class="notion-blank notion-block-256fcf41935f806d99d4e3ab3184caa0"> </div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-256fcf41935f807282f2ce766368a70e" data-id="256fcf41935f807282f2ce766368a70e"><span><div id="256fcf41935f807282f2ce766368a70e" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f807282f2ce766368a70e" title="2. 表级锁[共享锁、独占锁]"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2. 表级锁[共享锁、独占锁]</span></span></h2><ul class="notion-list notion-list-disc notion-block-256fcf41935f80ba88ecd5c75dd09aa5"><li>分类</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f80ba88ecd5c75dd09aa5"><li>表锁；</li><li>元数据锁（MDL）;</li><li>意向锁；</li><li>AUTO-INC 锁；</li></ul></ul><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-256fcf41935f8050a807cd399ba2f156" data-id="256fcf41935f8050a807cd399ba2f156"><span><div id="256fcf41935f8050a807cd399ba2f156" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f8050a807cd399ba2f156" title="2.1 表锁"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.1 表锁</span></span></h3><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-256fcf41935f80d3ac8dea5cce6320cb" data-id="256fcf41935f80d3ac8dea5cce6320cb"><span><div id="256fcf41935f80d3ac8dea5cce6320cb" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80d3ac8dea5cce6320cb" title="2.2 元数据锁（MDL）"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.2 元数据锁（MDL）</span></span></h3><ul class="notion-list notion-list-disc notion-block-256fcf41935f800d8839cd25b7ba6e58"><li>什么时候调用？</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f800d8839cd25b7ba6e58"><div class="notion-text notion-block-256fcf41935f8019ad42e8a2ef07eb30">我们不需要显示的使用 MDL，因为当我们对数据库表进行操作时，会<b>自动</b>给这个表加上 MDL</div></ul></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f8000bb19ecaf99eb26c8"><li>什么时候释放？</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f8000bb19ecaf99eb26c8"><div class="notion-text notion-block-256fcf41935f80c48c30f979a8177835">该事务提交之后，<b>自动</b>释放</div></ul></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f803bbd7ffd27b8111007"><li>分类</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f803bbd7ffd27b8111007"><li>对一张表进行<b> CRUD 操作</b>时，加的是 <b>MDL读锁</b>；</li><li>对一张<b>表做结构变更操作</b>的时候，加的是 <b>MDL写锁</b>；</li></ul></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80789c0cda74f3598c69"><li>目的</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f80789c0cda74f3598c69"><div class="notion-text notion-block-256fcf41935f80369f5ae7786f406432">MDL 是为了保证当用户对表执行<b> CRUD 操作</b>时，防止其他线程对这个<b>表结构</b>做了变更。</div></ul></ul><div class="notion-blank notion-block-256fcf41935f805eacf2e205152f9b37"> </div><ul class="notion-list notion-list-disc notion-block-256fcf41935f803db72eeedf789dcf03"><li>读会阻塞原因？</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f803db72eeedf789dcf03"><li>事务A长事务，读锁。</li><li>事务A没结束，事务B写锁，B被阻塞。<b>写锁优先级高于读锁，所以后续来的读事务都被阻塞。</b></li><li>处理</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f80c293d6d1cfd0568234"><div class="notion-text notion-block-256fcf41935f808aa6f9cb72060f0452">为了能安全的对表结构进行变更，在对表结构变更前，先要看看数据库中的长事务，是否有事务已经对表加上了 MDL 读锁，如果可以考虑 kill掉这个长事务，然后再做表结构的变更。</div></ul></ul></ul><div class="notion-blank notion-block-256fcf41935f8026bbf2ca18b93029f1"> </div><div class="notion-blank notion-block-256fcf41935f8028a745ee4cf73f3d08"> </div><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-256fcf41935f80b39245dc7eb1f3697a" data-id="256fcf41935f80b39245dc7eb1f3697a"><span><div id="256fcf41935f80b39245dc7eb1f3697a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80b39245dc7eb1f3697a" title="2.3 意向锁"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.3 <b>意向锁</b></span></span></h3><div class="notion-text notion-block-256fcf41935f8009b959f89c723e0fd2">意向锁是<b>一种表级锁，用于表明一个事务打算在表中的某些行上施加共享锁或排他锁</b>。这种锁的目的是在一个事务需要对表进行行级锁定时，自动在表级上施加相应的意向锁，以便其他事务在尝试对整个表施加表级锁时能够快速判断是否存在冲突[^1^][^2^]。意向锁分为意向共享锁（IS）和意向排他锁（IX）两种[^3^]。</div><div class="notion-blank notion-block-256fcf41935f80abb244d609de0f2881"> </div><div class="notion-blank notion-block-256fcf41935f80919cd6e13db1d77697"> </div><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-256fcf41935f8097b0a6c5accea16d9a" data-id="256fcf41935f8097b0a6c5accea16d9a"><span><div id="256fcf41935f8097b0a6c5accea16d9a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f8097b0a6c5accea16d9a" title="2.4 AUTO-INC 锁"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.4 <b>AUTO-INC 锁</b></span></span></h3><div class="notion-text notion-block-256fcf41935f802e8996ffd310eaf25c">指的是 MySQL（主要是 InnoDB 存储引擎）里对 <b>自增主键（AUTO_INCREMENT）</b> 字段分配时使用的一种特殊锁。</div><div class="notion-text notion-block-256fcf41935f80d394ebcca941f56ba7">保证在并发插入时，自增列的值分配是连续且唯一的。</div><div class="notion-blank notion-block-256fcf41935f80ea99d3e359fa65b0f0"> </div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-256fcf41935f80ff918cc8c6ab6db192" data-id="256fcf41935f80ff918cc8c6ab6db192"><span><div id="256fcf41935f80ff918cc8c6ab6db192" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80ff918cc8c6ab6db192" title="3. 行锁"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3. 行锁</span></span></h2><div class="notion-text notion-block-256fcf41935f80b48724e5f3a1364a1e"><b>InnoDB 引擎是支持行级锁的，而 MyISAM 引擎并不支持行级锁。</b></div><ul class="notion-list notion-list-disc notion-block-256fcf41935f8079bbc7ebe0df5ca792"><li>锁的分类</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f8079bbc7ebe0df5ca792"><div class="notion-text notion-block-256fcf41935f8026a3b4ed18f0ee0804">共享锁（S锁）满足读读共享，读写互斥。独占锁（X锁）满足写写互斥、读写互斥。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f800d8e10d254f957581c"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A3111537c-13a2-4b54-a14c-da586ed4009e%3Aimage.png?table=block&amp;id=256fcf41-935f-800d-8e10-d254f957581c&amp;t=256fcf41-935f-800d-8e10-d254f957581c" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-256fcf41935f80808222f67d54135f5a">eg</div></ul></ul><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-256fcf41935f80cb9949d4b2fdf93a49" data-id="256fcf41935f80cb9949d4b2fdf93a49"><span><div id="256fcf41935f80cb9949d4b2fdf93a49" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80cb9949d4b2fdf93a49" title="3.1 Record Lock"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.1 Record Lock</span></span></h3><blockquote class="notion-quote notion-block-256fcf41935f80a2a06fd989aaa3ffbc"><div>记录锁，也就是仅仅把一条记录锁上</div></blockquote><div class="notion-text notion-block-256fcf41935f807d848dc57f4a5ff33c">eg</div><div class="notion-blank notion-block-256fcf41935f803b8e01dcc6b7083cd4"> </div><div class="notion-text notion-block-256fcf41935f8058b5c8cb4239b14772">

</div><div class="notion-blank notion-block-256fcf41935f80238c51e996ebcf3c1a"> </div><div class="notion-blank notion-block-256fcf41935f80ba9f32cceeca38a830"> </div><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-256fcf41935f803f97f3e6350c68d421" data-id="256fcf41935f803f97f3e6350c68d421"><span><div id="256fcf41935f803f97f3e6350c68d421" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f803f97f3e6350c68d421" title="3.2 Gap Lock"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.2 Gap Lock</span></span></h3><blockquote class="notion-quote notion-block-256fcf41935f808ebefdcad60f54f516"><div>间隙锁，锁定一个范围，但是不包含记录本身</div></blockquote><div class="notion-blank notion-block-256fcf41935f80ceb30ed71170133248"> </div><div class="notion-blank notion-block-256fcf41935f8096a2cffb880c6fb65e"> </div><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-256fcf41935f80c78396e156215c8b06" data-id="256fcf41935f80c78396e156215c8b06"><span><div id="256fcf41935f80c78396e156215c8b06" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80c78396e156215c8b06" title="3.3 Next-Key Lock"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.3 Next-Key Lock</span></span></h3><blockquote class="notion-quote notion-block-256fcf41935f80578e84c6e1a5550782"><div>Record Lock + Gap Lock 的组合，锁定一个范围，并且锁定记录本身</div></blockquote><div class="notion-blank notion-block-256fcf41935f803286addf1d5d09a5bb"> </div><div class="notion-blank notion-block-256fcf41935f803c845fed666419ca51"> </div><div class="notion-blank notion-block-256fcf41935f804fb0a8e1349d1e0a37"> </div><div class="notion-blank notion-block-256fcf41935f80dd89ffd5ff79b85b7b"> </div><div class="notion-blank notion-block-256fcf41935f800eb0a4fddfa4a03bf3"> </div></div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[粗略了解MySQL事务]]></title>
            <link>https://zzzero.site/article/256fcf41-935f-802f-a572-daefbd754740</link>
            <guid>https://zzzero.site/article/256fcf41-935f-802f-a572-daefbd754740</guid>
            <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[事务有哪些特性？多客户端同时访问MySQL会出现什么问题？是通过什么解决的（事务的隔离级别）]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-256fcf41935f802fa572daefbd754740"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-sync-block notion-block-256fcf41935f809f99d8c85d953c4a19"><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-256fcf41935f80d7be7cd624c4863295" data-id="256fcf41935f80d7be7cd624c4863295"><span><div id="256fcf41935f80d7be7cd624c4863295" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80d7be7cd624c4863295" title="1. 事务的特性"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1. 事务的特性</span></span></h2><ul class="notion-list notion-list-disc notion-block-256fcf41935f800c9a36c57425221516"><li><b>原子性（Atomicity）</b>———通过undolog（回滚日志）来保证的</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f800c9a36c57425221516"><div class="notion-text notion-block-256fcf41935f809ba71bf1c386980149">一个事务中的所有操作，要么全部完成，要么全部不完成</div><div class="notion-blank notion-block-256fcf41935f80e4a1e0cedde0de9f35"> </div></ul></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80ff868dc46d6ecb86d6"><li><b>一致性（Consistency）</b>———通过持久性+原子性+隔离性来保证</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f80ff868dc46d6ecb86d6"><div class="notion-text notion-block-256fcf41935f80178feaf8e08256f5b0">是指事务操作前后，是从一个稳定状态到另一个稳定状态，数据库保持一致性的状态</div><div class="notion-blank notion-block-256fcf41935f8034a37ae2c1f2956070"> </div></ul></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80ee9274f9ae8a094b31"><li><b>隔离性（Isolation）</b>———通过 MVCC（多版本并发控制）或锁机制来保证的</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f80ee9274f9ae8a094b31"><div class="notion-text notion-block-256fcf41935f800896b6d456647d473d">多个并发事务同时操作数据，多个事务间不相互影响</div><div class="notion-blank notion-block-256fcf41935f80ffb3c7cf3f63a867eb"> </div></ul></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80338840d1dcdb0098f5"><li><b>持久性（Durability）</b>———通过 redolog（重做日志）来保证的</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f80338840d1dcdb0098f5"><div class="notion-text notion-block-256fcf41935f8090927dc62f0a86bb06">事务处理结束后，对数据的修改就是永久的，即便系统故障也不会丢失</div></ul></ul><div class="notion-blank notion-block-256fcf41935f80aab118f0489117d88f"> </div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-256fcf41935f80cd991ac6d5d0127756" data-id="256fcf41935f80cd991ac6d5d0127756"><span><div id="256fcf41935f80cd991ac6d5d0127756" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80cd991ac6d5d0127756" title="2. 并发事务会引发的问题"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2. 并发事务会引发的问题</span></span></h2><ul class="notion-list notion-list-disc notion-block-256fcf41935f809ba51acbda5c1b7ec0"><li>MySQL服务端是允许多个客户端连接的，这意味着 MySQL 会出现同时处理多个事务的情况。</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f801a8b76cfd7a6283602"><li>那么在同时处理多个事务的时候，就可能出现脏读（dirty read）、不可重复读（non-repeatableread）、幻读（phantom read）的问题。</li></ul><div class="notion-blank notion-block-256fcf41935f80eca268f45343fb041c"> </div><ul class="notion-list notion-list-disc notion-block-256fcf41935f8097b62cf0f67a38b4ab"><li><b>脏读（dirty read）</b></li><ul class="notion-list notion-list-disc notion-block-256fcf41935f8097b62cf0f67a38b4ab"><div class="notion-text notion-block-256fcf41935f802a8dd2ea815e50cbc0">【事务A读取到事务B修改但<b>未提交</b>的数据】</div></ul></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80feb4c0e21d66f7cf6f"><li><b>不可重复读（non-repeatableread）</b></li><ul class="notion-list notion-list-disc notion-block-256fcf41935f80feb4c0e21d66f7cf6f"><div class="notion-text notion-block-256fcf41935f8086a0ccdcb8fbea519a">【事务A，先后两次读取的<b>数据不一致</b>】</div></ul></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80cd853ffe2848cb5a5c"><li><b>幻读（phantom read）</b></li><ul class="notion-list notion-list-disc notion-block-256fcf41935f80cd853ffe2848cb5a5c"><div class="notion-text notion-block-256fcf41935f80d4a4d5e1c2a660dc02">【事务A，两次读取的数据的<b>条数不一致</b>】</div></ul></ul><div class="notion-blank notion-block-256fcf41935f8079b949eb8f7e0e7453"> </div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-256fcf41935f80ef9e18d2e1192320cf" data-id="256fcf41935f80ef9e18d2e1192320cf"><span><div id="256fcf41935f80ef9e18d2e1192320cf" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80ef9e18d2e1192320cf" title="3. 事务的隔离级别"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3. 事务的隔离级别</span></span></h2><div class="notion-text notion-block-256fcf41935f80f5bd8cd86fc47d42e5">前面我们提到，当多个事务并发执行时可能会遇到「脏读、不可重复读、幻读」的现象，这些现象会对<b>事务的一致性</b>产生不同程序的影响。</div><ul class="notion-list notion-list-disc notion-block-256fcf41935f80e28fa5d8c68d46b040"><li>这三个现象的<b>严重性排序</b>如下：</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f80e28fa5d8c68d46b040"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f80cb8669c692b3b812a0"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ad87220bb-648e-4488-b3a6-fb80a4ce692c%3Aimage.png?table=block&amp;id=256fcf41-935f-80cb-8669-c692b3b812a0&amp;t=256fcf41-935f-80cb-8669-c692b3b812a0" alt="notion image" loading="lazy" decoding="async"/></div></figure></ul></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f801fa7d3f637aabbb6e3"><li><b>SQL 标准提出了四种隔离级别来规避这些现象</b>，隔离级别越高，性能效率就越低，这四个隔离级别如下（<b>隔离水平从高到低</b>）：</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f801fa7d3f637aabbb6e3"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f80edbcdbd4cf4594236d"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A5023131c-f876-4efe-9d0b-73b904c15d4e%3Aimage.png?table=block&amp;id=256fcf41-935f-80ed-bcdb-d4cf4594236d&amp;t=256fcf41-935f-80ed-bcdb-d4cf4594236d" alt="notion image" loading="lazy" decoding="async"/></div></figure></ul></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f800b86cffa5510337b43"><li>隔离级别</li><ul class="notion-list notion-list-disc notion-block-256fcf41935f800b86cffa5510337b43"><li><b>读未提交（read uncommitted）</b>：指一个事务还没提交时，它做的变更就能被其他事务看到；</li><div class="notion-blank notion-block-256fcf41935f8042962bd23a796c612f"> </div><li><b>读已提交（read committed）：</b>指一个事务提交之后，它做的变更才能被其他事务看到；</li><div class="notion-blank notion-block-256fcf41935f80d6b4c7c4990585822e"> </div><li><b>可重复读（repeatable read）：</b>指一个事务执行过程中看到的数据，一直跟这个事务启动时看到的数据是一致的，<b>MySQL InnoDB 引擎的默认隔离级别；MVCC版本控制实现。</b></li><div class="notion-blank notion-block-256fcf41935f8068a253cc45861fbc13"> </div><li><b>串行化（serializable）；</b>会对记录加上读写锁，在多个事务对这条记录进行读写操作时，如果发生了读写冲突的时候，后访问的事务必须等前一个事务执行完成，才能继续执行；</li></ul></ul><div class="notion-blank notion-block-256fcf41935f8001afd2c1fea90ece5e"> </div></div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[MySQL如何存储数据？]]></title>
            <link>https://zzzero.site/article/256fcf41-935f-803e-9914-cf979c4d74fd</link>
            <guid>https://zzzero.site/article/256fcf41-935f-803e-9914-cf979c4d74fd</guid>
            <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[MySQL是以什么方式存储数据的]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-256fcf41935f803e9914cf979c4d74fd"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-sync-block notion-block-256fcf41935f8020b588c8d271b650bc"><blockquote class="notion-quote notion-block-256fcf41935f804290dbcfebec7eb353"><div>UTF-8编码中
一个数字1个字节
一个单词1个字节
一个汉字：少数3字节，多数4字节</div></blockquote><div class="notion-blank notion-block-256fcf41935f80a0bb4cf49eccd677bd"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-256fcf41935f802bbc07efbb3c4f6988" data-id="256fcf41935f802bbc07efbb3c4f6988"><span><div id="256fcf41935f802bbc07efbb3c4f6988" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f802bbc07efbb3c4f6988" title="1.行【这里是InnoDB存储引擎的行格式，一行记录最大为65535字节】"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.行【这里是InnoDB存储引擎的行格式，一行记录最大为65535字节】</span></span></h3><blockquote class="notion-quote notion-block-256fcf41935f808ea1bbd490387f1f25"><div>数据库中的记录是按照<b>行</b>来存储的！</div></blockquote><div class="notion-text notion-block-256fcf41935f80209f30c4b67da57685">Redundant、Compact、Dynamic、Compressed</div><div class="notion-text notion-block-256fcf41935f80e18068dd6afc9b91d0"><b>重点介绍Compact行格式：</b></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f80318ae8c9331a147ae3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:768px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Af699578c-2ac9-4c20-af21-d06d746ce892%3Aimage.png?table=block&amp;id=256fcf41-935f-8031-8ae8-c9331a147ae3&amp;t=256fcf41-935f-8031-8ae8-c9331a147ae3" alt="notion image" loading="lazy" decoding="async"/></div></figure><details class="notion-toggle notion-block-256fcf41935f8021846ac341178ac5b4"><summary><b>变长字段长度列表</b></summary><div><div class="notion-text notion-block-256fcf41935f8052a82eca4e168bd44a">里边存储的是变长字段的长度（一个变长字段，1或2字节来存储他的长度）</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f808ebb4df9055aec749b"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Ab2962374-d316-43d3-ac89-adf73613a3df%3Aimage.png?table=block&amp;id=256fcf41-935f-808e-bb4d-f9055aec749b&amp;t=256fcf41-935f-808e-bb4d-f9055aec749b" alt="notion image" loading="lazy" decoding="async"/></div></figure></div></details><details class="notion-toggle notion-block-256fcf41935f8088b447e9ad134af498"><summary><b>NULL值列表</b></summary><div><div class="notion-text notion-block-256fcf41935f805fb5a6d6a453aa4f1e">存储每个字段的记录是否为null</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f8022a229cde657c2bc1a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A41d33119-a201-42a8-8a96-a17dd82db236%3Aimage.png?table=block&amp;id=256fcf41-935f-8022-a229-cde657c2bc1a&amp;t=256fcf41-935f-8022-a229-cde657c2bc1a" alt="notion image" loading="lazy" decoding="async"/></div></figure></div></details><details class="notion-toggle notion-block-256fcf41935f80148300ec9d43949ae1"><summary><b>记录头信息</b>【列举了比较重要的】</summary><div><ul class="notion-list notion-list-disc notion-block-256fcf41935f8020b314e86b4c224722"><li><b>delete_mask ：标识此条数据是否被删除</b>。从这里可以知道，我们执行 detele 删除记录的时候，并不会真正的删除记录，只是将这个记录的 delete_mask 标记为 1。</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80b8a676ff65107c9942"><li><b>next_record：下一条记录的位置</b>。从这里可以知道，记录与记录之间是通过链表组织的。在前面我也提到了，指向的是下一条记录的「记录头信息」和「真实数据」之间的位置，这样的好处是向左读就是记录头信息，向右读就是真实数据，比较方便。</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f800c86e5dc9385114ae8"><li><b>record_type：表示当前记录的类型</b>，0表示普通记录，1表示B+树非叶子节点记录，2表示最小记录，3表示最大记录</li></ul></div></details><details class="notion-toggle notion-block-256fcf41935f80f2bc49c6aca4ce0767"><summary><b>row_id</b></summary><div><div class="notion-text notion-block-256fcf41935f804fb545e354d3455559">如果我们建表的时候<b>指定了主键或者唯一约束列</b>，那么<b>就没有 row_id</b> 隐藏字段了。<b>如果既没有</b>指定主键，又没有唯一约束，<b>那么 InnoDB 就会为记录添加 row_id 隐藏字段</b>。row_id不是必需的，占用 6 个字节。</div></div></details><details class="notion-toggle notion-block-256fcf41935f80918fc5e685dc501111"><summary><b>trx_id</b></summary><div><div class="notion-text notion-block-256fcf41935f804288c1dfbed40e2fb9"><b>事务id，表示这个数据是由哪个事务生成的。</b> trx_id是必需的，占用 6 个字节。</div></div></details><details class="notion-toggle notion-block-256fcf41935f8037b028d07a459ff731"><summary><b>roll_pointer</b></summary><div><div class="notion-text notion-block-256fcf41935f80de8772d43d407830ab"><b>这条记录上一个版本的指针</b>。roll_pointer 是必需的，占用 7 个字节。</div></div></details><details class="notion-toggle notion-block-256fcf41935f8088b2d2fb78790887e9"><summary><b>具体数据</b></summary><div><ul class="notion-list notion-list-disc notion-block-256fcf41935f80e587b2ca4a94e61d66"><li>列1 值</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f807bacd4e023684db31e"><li>列2 值</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f8057b8bbed9f79296562"><li>…</li></ul></div></details><div class="notion-blank notion-block-256fcf41935f80809cd8ce41e789ad8b"> </div><div class="notion-blank notion-block-256fcf41935f80778557fcd1a19138c6"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-256fcf41935f8070ac11c86728e012ad" data-id="256fcf41935f8070ac11c86728e012ad"><span><div id="256fcf41935f8070ac11c86728e012ad" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f8070ac11c86728e012ad" title="2. 页【page 默认16KB连续空间】"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2. 页【page 默认16KB连续空间】</span></span></h3><ul class="notion-list notion-list-disc notion-block-256fcf41935f80b7adebd291172616ce"><li><span class="notion-default">问题：数据库读取数据不是按行来读取的，一次读取就是一次IO只处理一行数据，效率太低。</span></li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80eba760c1402d2e1346"><li><span class="notion-default"><b> 解决：所以InnoDB 的数据是按「页」为单位来读写的</b></span></li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80d980c2f32a2674fc3c"><li>类型：数据页、undo日志页、溢出页等</li></ul><div class="notion-blank notion-block-256fcf41935f80bdbb2ad6bbbc28a178"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-256fcf41935f80d4943ce5c46c0a4e82" data-id="256fcf41935f80d4943ce5c46c0a4e82"><span><div id="256fcf41935f80d4943ce5c46c0a4e82" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80d4943ce5c46c0a4e82" title="3.区【extent 1MB连续空间:64个连续的页]"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>3.区【extent 1MB连续空间:64个连续的页]</b></span></span></h3><ul class="notion-list notion-list-disc notion-block-256fcf41935f807c9a84c775754aff74"><li>问题：数据量太大时，相邻两个页的物理位置不连续，离太远，磁盘查询 会有大量随机IO【随机IO是非常慢的！因为会频繁的移动磁头】，</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f804f9542dd280aa8e2d1"><li><b>解决：数据量大的时候，按区进行分配空间，</b>让相邻的两个页的物理位置相邻，这样就可以使用顺序IO在范围查询（扫描叶子结点）的时候性能就很高。</li></ul><div class="notion-blank notion-block-256fcf41935f80fa8bb8ff6ec5d68666"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-256fcf41935f80678511ed17787ae98c" data-id="256fcf41935f80678511ed17787ae98c"><span><div id="256fcf41935f80678511ed17787ae98c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80678511ed17787ae98c" title="4 段 【segment 段：数据段、索引段、回滚段】"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">4 段 【segment 段：数据段、索引段、回滚段】</span></span></h3><div class="notion-text notion-block-256fcf41935f8070b4a5c097c25d4923">一个段是由多个区组成的，一般有数据段、索引段、回滚段等</div><ul class="notion-list notion-list-disc notion-block-256fcf41935f8012b59edcd24b0d2baa"><li>索引段：存放 B + 树的非叶子节点的区的集合；</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80ceb7bbeb904c900e45"><li>数据段：存放 B + 树的叶子节点的区的集合；</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80dbbe21e3b56d51a4fb"><li>回滚段：存放的是回滚数据的区的集合，之前讲<b><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://xiaolincoding.com/mysql/transaction/mvcc.html">事务隔离 (opens new window)</a></b>的时候就介绍到了 MVCC 利用了回滚段实现了多版本查询数据。</li></ul><div class="notion-blank notion-block-256fcf41935f80959d24e3b4d6b21226"> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f801993efd997c8103658"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A91bc5343-c648-49f3-9d84-48fef0a3bcb1%3Aimage.png?table=block&amp;id=256fcf41-935f-8019-93ef-d997c8103658&amp;t=256fcf41-935f-8019-93ef-d997c8103658" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-blank notion-block-256fcf41935f80f4a669c724f3583bab"> </div><div class="notion-blank notion-block-256fcf41935f804ea250e2ad32cbfb69"> </div><div class="notion-blank notion-block-256fcf41935f80b4a5f1f2745b9d1238"> </div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-256fcf41935f80118320f6fa172b5b42" data-id="256fcf41935f80118320f6fa172b5b42"><span><div id="256fcf41935f80118320f6fa172b5b42" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f80118320f6fa172b5b42" title="补充："><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">补充：</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-256fcf41935f8059a833fc0bc65af582" data-id="256fcf41935f8059a833fc0bc65af582"><span><div id="256fcf41935f8059a833fc0bc65af582" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f8059a833fc0bc65af582" title="1 行溢出怎么办？"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1 行溢出怎么办？</span></span></h4><div class="notion-text notion-block-256fcf41935f80e9941edc3a1d841963"><code class="notion-inline-code">Compact</code>行格式处理方式：存储部分数据、20字节存储溢出页的地址：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f8070abe5f50ae4b5c1e3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A33694524-8ee0-4583-bcc5-928bef6fc651%3Aimage.png?table=block&amp;id=256fcf41-935f-8070-abe5-f50ae4b5c1e3&amp;t=256fcf41-935f-8070-abe5-f50ae4b5c1e3" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-blank notion-block-256fcf41935f80a6a0e8f57646827c95"> </div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-256fcf41935f8081a6d1d02012a3b5ec" data-id="256fcf41935f8081a6d1d02012a3b5ec"><span><div id="256fcf41935f8081a6d1d02012a3b5ec" class="notion-header-anchor"></div><a class="notion-hash-link" href="#256fcf41935f8081a6d1d02012a3b5ec" title="2 顺序IO和随机IO？"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2 顺序IO和随机IO？</span></span></h4><div class="notion-text notion-block-256fcf41935f80c09e53c4585f21cb17"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://blog.csdn.net/zhenghuishengq/article/details/129080088">https://blog.csdn.net/zhenghuishengq/article/details/129080088</a></div><div class="notion-row notion-block-256fcf41935f80d583c7fb74834e68ee"><div class="notion-column notion-block-256fcf41935f8082a966e216a05a381f" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f807c9054e2973e6d926c"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A4037f679-5162-4fa6-a833-c1ac2ef9e82b%3Aimage.png?table=block&amp;id=256fcf41-935f-807c-9054-e2973e6d926c&amp;t=256fcf41-935f-807c-9054-e2973e6d926c" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div><div class="notion-column notion-block-256fcf41935f80aebb3dcfc913392512" style="width:calc((100% - (1 * min(32px, 4vw))) * 0.5)"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f8042803fe538619b4992"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A22aec610-79d2-418a-9c8c-c9aa6bef8374%3Aimage.png?table=block&amp;id=256fcf41-935f-8042-803f-e538619b4992&amp;t=256fcf41-935f-8042-803f-e538619b4992" alt="notion image" loading="lazy" decoding="async"/></div></figure></div><div class="notion-spacer"></div></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-256fcf41935f80b090c4c433465cced3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A943b6047-7466-4dc4-a847-aa657f6fcc53%3Aimage.png?table=block&amp;id=256fcf41-935f-80b0-90c4-c433465cced3&amp;t=256fcf41-935f-80b0-90c4-c433465cced3" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-256fcf41935f80ac808ef5222ba2ba97">要找数据：【八个扇区为一个页（==一个柱面），<em><b>一次磁盘IO就是一页 4KB，磁盘读取的最小单位是扇区！</b></em>】</div><ul class="notion-list notion-list-disc notion-block-256fcf41935f80cb8d7cd4ac7682ae62"><li>确定柱面号【黄色或者别的部分】</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f804390c6ce322f1e1e88"><li>确定盘片号</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80e191d6e267df05246d"><li>确定扇区</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80a89c31c11727a48bed"><li>移动磁头【寻找磁道和盘片/面 需要移动磁头 耗费大量时间】</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f8012a323e275c633b545"><li>主轴带动盘面转动</li></ul><ul class="notion-list notion-list-disc notion-block-256fcf41935f80d69c5be8cbbfb8a6da"><li>读取和传输数据</li></ul><div class="notion-text notion-block-256fcf41935f807d9a7ad48ed731a643">预读：把周围的扇区的数据读出来，避免移动磁头，叫做预读！</div><div class="notion-text notion-block-256fcf41935f8082b243f7570009c8ab">为什么把页（这里说的也是，MySQL的多个页（一个页16KB，也就是4个柱面））划分到一起，就是为了避免随机IO，能够预读。效率更高</div></div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[粗略了解MySQL查询过程？]]></title>
            <link>https://zzzero.site/article/255fcf41-935f-8018-af2e-cc7ca4b0e300</link>
            <guid>https://zzzero.site/article/255fcf41-935f-8018-af2e-cc7ca4b0e300</guid>
            <pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[了解MySQL查询数据基本流程]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-255fcf41935f8018af2ecc7ca4b0e300"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-sync-block notion-block-255fcf41935f80c7ad58d57f0c2abef7"><blockquote class="notion-quote notion-block-255fcf41935f802aa32ded7b47617b8b"><div>原文链接：<span class="notion-link-mention"><a href="https://xiaolincoding.com/mysql/base/how_select.html#mysql-%E6%89%A7%E8%A1%8C%E6%B5%81%E7%A8%8B%E6%98%AF%E6%80%8E%E6%A0%B7%E7%9A%84" target="_blank" rel="noopener noreferrer" class="notion-link-mention-link"><img class="notion-link-mention-icon" src="https://cdn.xiaolincoding.com/icon.webp" alt="图解计算机基础"/><span class="notion-link-mention-provider">图解计算机基础</span><span class="notion-link-mention-title">执行一条 select 语句，期间发生了什么？</span></a><div class="notion-link-mention-preview"><article class="notion-link-mention-card"><img class="notion-link-mention-preview-thumbnail" src="https://cdn.xiaolincoding.com/icon.webp" alt="执行一条 select 语句，期间发生了什么？"/><div class="notion-link-mention-preview-content"><p class="notion-link-mention-preview-title">执行一条 select 语句，期间发生了什么？</p><p class="notion-link-mention-preview-description">带着这个问题，我们可以很好的了解 MySQL 内部的架构，所以这次小林就带大家拆解一下 MySQL 内部的结构，看看内部里的每一个“零件”具体是负责做什么的。</p><div class="notion-link-mention-preview-footer"><img class="notion-link-mention-preview-icon" src="https://cdn.xiaolincoding.com/icon.webp" alt="图解计算机基础"/><span class="notion-link-mention-preview-provider">图解计算机基础</span></div></div></article></div></span></div></blockquote><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-255fcf41935f80688fc5cf899fa91e8a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Aa79a4acb-a563-476c-9a53-e81058c51017%3Aimage.png?table=block&amp;id=255fcf41-935f-8068-8fc5-cf899fa91e8a&amp;t=255fcf41-935f-8068-8fc5-cf899fa91e8a" alt="notion image" loading="lazy" decoding="async"/></div></figure><ul class="notion-list notion-list-disc notion-block-255fcf41935f80eaadedfc5ec3503265"><li><b>连接器</b>：建立连接，管理连接、校验用户身份；</li></ul><ul class="notion-list notion-list-disc notion-block-255fcf41935f800bb67cda41e111fdae"><li><b>查询缓存</b>：查询语句如果命中查询缓存则直接返回，否则继续往下执行。MySQL 8.0 已删除该模块；</li></ul><ul class="notion-list notion-list-disc notion-block-255fcf41935f80aba40cca7b35e6dbf9"><li><b>解析 SQL：</b>通过解析器对 SQL 查询语句进行词法分析、语法分析，然后构建语法树，方便后续模块读取表名、字段、语句类型；</li></ul><ul class="notion-list notion-list-disc notion-block-255fcf41935f80d79abce26a262900dc"><li><b>执行 SQL</b>：执行 SQL 共有三个阶段：</li><ul class="notion-list notion-list-disc notion-block-255fcf41935f80d79abce26a262900dc"><li><b>预处理阶段</b>：检查表或字段是否存在；将 select * 中的* 符号扩展为表上的所有列。</li><li><b>优化阶段</b>：基于查询成本的考虑，选择查询成本最小的执行计划；</li><li><b>执行阶段</b>：根据执行计划执行 SQL 查询语句，从存储引擎读取记录，返回给客户端；</li></ul></ul></div></main></div>]]></content:encoded>
        </item>
    </channel>
</rss>