Packaged project.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

629 lines
36 KiB

<!DOCTYPE html>
<html lang="zh">
<head>
<!-- 元数据 -->
<meta charset="utf-8">
<link rel="icon" href="/images/favicon.ico">
<title>数据库 | YongKJ</title>
<meta name="author" content="yongkj" />
<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="robots" content="index,follow" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<meta name="format-detection" content="telphone=no, email=no" />
<meta name="description" itemprop="description" content="A pure heart and few desires." />
<meta name="description" content="数据库事务 定义 1)数据库事务是构成单一逻辑工作单元的操作集合,包含一个或多个数据库操作,这些操作构成一个逻辑上的整体。 2)一个典型的数据库事务如下所示 1234BEGIN TRANSACTION &#x2F;&#x2F;事务开始SQL1SQL2COMMIT&#x2F;ROLLBACK &#x2F;&#x2F;事务提交或回滚 事务的ACID特性 ">
<meta property="og:type" content="article">
<meta property="og:title" content="数据库">
<meta property="og:url" content="https://blog.yongkj.cn/2021/01/31/java-database/index.html">
<meta property="og:site_name" content="YongKJ">
<meta property="og:description" content="数据库事务 定义 1)数据库事务是构成单一逻辑工作单元的操作集合,包含一个或多个数据库操作,这些操作构成一个逻辑上的整体。 2)一个典型的数据库事务如下所示 1234BEGIN TRANSACTION &#x2F;&#x2F;事务开始SQL1SQL2COMMIT&#x2F;ROLLBACK &#x2F;&#x2F;事务提交或回滚 事务的ACID特性 ">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://blog.yongkj.cn/2021/01/31/java-database/%E7%94%B5%E8%84%91%E5%A3%81%E7%BA%B81920x1080.png">
<meta property="article:published_time" content="2021-01-31T12:55:52.000Z">
<meta property="article:modified_time" content="2023-05-30T04:26:16.692Z">
<meta property="article:author" content="yongkj">
<meta property="article:tag" content="事务">
<meta property="article:tag" content="数据">
<meta property="article:tag" content="索引">
<meta property="article:tag" content="查询">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://blog.yongkj.cn/2021/01/31/java-database/%E7%94%B5%E8%84%91%E5%A3%81%E7%BA%B81920x1080.png">
<meta name="twitter:site" content="@Candiinya">
<link rel="alternate" href="atom.xml" type="application/atom+xml">
<!-- 站点验证相关 -->
<!-- 样式表文件 -->
<link rel="stylesheet" id="kratos-css" href="/css/kratosr.min.css" type="text/css" media="all">
<link rel="stylesheet" id="highlight-css" href="/css/highlight.min.css" type="text/css" media="all">
<link rel="stylesheet" id="fontawe-css" href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" type="text/css" media="all">
<link rel="stylesheet" id="nprogress-css" href="https://cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.min.css" type="text/css" media="all">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css">
<link rel="stylesheet" id="darkmode-css" href="/css/kr-dark.min.css" type="text/css" media="all">
<!-- 不得不预先加载的一些JS文件 -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/qrcode_js@1.0.0/qrcode.min.js"></script>
<meta name="generator" content="Hexo 5.2.0"></head>
<body class="custom-background">
<div id="kratos-wrapper">
<div id="kratos-page">
<div id="kratos-header">
<div class="nav-toggle"><a class="kratos-nav-toggle js-kratos-nav-toggle"><i></i></a></div>
<header id="kratos-header-section">
<div class="container">
<div class="nav-header">
<div class="color-logo"><a href="/">YongKJ</a></div>
<nav id="kratos-menu-wrap">
<ul id="kratos-primary-menu" class="sf-menu">
<li><a href="/"><i class="fa fa-home"></i>首页</a></li>
<li><a href="/archives/"><i class="fa fa-file"></i>档案馆</a></li>
<li>
<a><i class="fa fa-link"></i>链接</a>
<ul class="sub-menu">
<li><a target="_blank" rel="noopener" href="http://software.yongkj.cn/software/">软件俱乐部</a></li>
<li><a target="_blank" rel="noopener" href="http://pocketyun.yongkj.cn/pocketyun/">袖珍网盘吧</a></li>
<li><a target="_blank" rel="noopener" href="http://study.yongkj.cn/">英语随身学</a></li>
</ul>
</li>
<li><a href="/atom.xml"><i class="fa fa-rss"></i>RSS 订阅</a></li>
<li><a href="/about/"><i class="fa fa-paper-plane"></i>关于我</a></li>
</ul>
</nav>
</div>
</div>
</header>
</div>
<div class="kratos-start kratos-hero-2">
<!-- <div class="kratos-overlay"></div> -->
<div class="kratos-cover kratos-cover-2 text-center">
<div class="desc desc2 animate-box">
<a href="/"><h2>YongKJ</h2><br><span>勇往直前,永不言弃</span></a>
</div>
</div>
</div>
<div id="kratos-blog-post">
<div class="container">
<div class="row">
<div id="main">
<section class="col-md-8">
<article>
<div class="kratos-hentry kratos-post-inner clearfix">
<header class="kratos-entry-header">
<h1 class="kratos-entry-title text-center">数据库</h1>
<div class="kratos-post-meta text-center">
<span>
<i class="fa fa-calendar"></i> 2021-01-31
<i class="fa fa-folder"></i> 分类于 <a class="label-link" href="/categories/Java%E5%AD%A6%E4%B9%A0/">Java学习</a>
<i class="fa fa-user"></i> 作者 yongkj
<i class="fa fa-edit"></i>
~3.33K
</span>
</div>
</header>
<div class="kratos-post-content">
<div class="kratos-post-inner-toc">
<ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BA%8B%E5%8A%A1"><span class="toc-number">1.</span> <span class="toc-text">数据库事务</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E8%84%8F%E8%AF%BB%E3%80%81%E5%B9%BB%E8%AF%BB%E3%80%81%E4%B8%8D%E5%8F%AF%E9%87%8D%E5%A4%8D%E8%AF%BB"><span class="toc-number">2.</span> <span class="toc-text">数据库的脏读、幻读、不可重复读</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%B4%A2%E5%BC%95"><span class="toc-number">3.</span> <span class="toc-text">索引</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#SQL%E5%9F%BA%E7%A1%80"><span class="toc-number">4.</span> <span class="toc-text">SQL基础</span></a></li></ol>
</div>
<hr />
<h3 id="数据库事务"><a href="#数据库事务" class="headerlink" title="数据库事务"></a>数据库事务</h3><ol>
<li>定义</li>
</ol>
<p> 1)数据库事务是构成单一逻辑工作单元的操作集合,包含一个或多个数据库操作,这些操作构成一个逻辑上的整体。</p>
<p> 2)一个典型的数据库事务如下所示</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">BEGIN TRANSACTION &#x2F;&#x2F;事务开始</span><br><span class="line">SQL1</span><br><span class="line">SQL2</span><br><span class="line">COMMIT&#x2F;ROLLBACK &#x2F;&#x2F;事务提交或回滚</span><br></pre></td></tr></table></figure>
<ol start="2">
<li>事务的ACID特性</li>
</ol>
<p> 1)**原子性(Atomicity)**:事务中的所有操作作为一个整体像原子一样不可分割,要么全部成功,要么全部失败。</p>
<p> 2)**一致性(Consistency)**:事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。</p>
<p> 3)**隔离性(Isolation)**:并发执行的事务不会相互影响,其对数据库的影响和它们串行执行时一样。比如多个用户同时往一个账户转账,最后账户的结果应该和他们按先后次序转账的结果一样。</p>
<p> 4)**持久性(Durability)**:事务一旦提交,其对数据库的更新就是持久的。任何事务或系统故障都不会导致数据丢失。</p>
<blockquote>
<p>一致性状态:</p>
<ol>
<li><p>系统的状态满足数据的完整性约束(主码,参照完整性,check约束等) </p>
</li>
<li><p>系统的状态反应数据库本应描述的现实世界的真实状态,比如转账前后两个账户的金额总和应该保持不变。</p>
</li>
</ol>
</blockquote>
<h3 id="数据库的脏读、幻读、不可重复读"><a href="#数据库的脏读、幻读、不可重复读" class="headerlink" title="数据库的脏读、幻读、不可重复读"></a>数据库的脏读、幻读、不可重复读</h3><ol>
<li>脏读:</li>
</ol>
<p> 1)指一个事务A正在访问数据,并且对该数据进行了修改,但是这种修改还没有提交到数据库中(也可能因为某些原因Rollback了)。这时候另外一个事务B也访问这个数据,然后使用了这个被A修改的数据,那么这个数据就是脏的,并不是数据库中真实的数据。这就被称作脏读。</p>
<p> 2)解决办法:把数据库事务隔离级别调整到READ_COMMITTED</p>
<p> 3)即让用户在更新时锁定数据库,阻止其他用户读取,直到更新全部完成才让你读取。</p>
<ol start="2">
<li>幻读:</li>
</ol>
<p> 1)指一个事务A对一个表中的数据进行了修改,而且该修改涉及到表中所有的数据行;同时另一个事务B也在修改表中的数据,该修改是向表中插入一行新数据。那么经过这一番操作之后,操作事务A的用户就会发现表中还有没修改的数据行,就像发生了幻觉一样。这就被称作幻读。</p>
<p> 2)解决办法:把数据库事务隔离级别调整到SERIALIZABLE_READ</p>
<ol start="3">
<li>不可重复读:</li>
</ol>
<p> 1)指在一个事务A内,多次读同一个数据,但是事务A没有结束时,另外一个事务B也访问该同一数据。那么在事务A的两次读数据之间,由于事务B的修改导致事务A两次读到的数据可能是不一样的。这就发生了在一个事务内两次读到的数据不一样,这就被称作不可重复读。</p>
<p> 2)解决办法:把数据库事务隔离级别调整到REPEATABLE_READ</p>
<blockquote>
<p>注:</p>
<p>级别高低:脏读 &lt; 不可重复读 &lt; 幻读</p>
<p>所以设置了最高级别的SERIALIZABLE_READ就不需要设置其他的了,即解决了幻读问题那么脏度和不可重复读自然就都解决了。</p>
</blockquote>
<h3 id="索引"><a href="#索引" class="headerlink" title="索引"></a>索引</h3><ol>
<li>为什么需要索引?</li>
</ol>
<p> 1)索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据,解决效率低问题</p>
<ol start="2">
<li>优点</li>
</ol>
<p> 1)可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性</p>
<p> 2)建立索引可以大大提高检索的数据,以及减少表的检索行数</p>
<p> 3)在表连接的连接条件,可以加速表与表直接的相连</p>
<p> 4)在分组和排序字句进行数据检索,可以减少查询时间中分组和排序时所消耗的时间(数据库的记录会重新排序)</p>
<p> 5)建立索引,在查询中使用索引 可以提高性能</p>
<ol start="3">
<li>索引采取什么样的结构</li>
</ol>
<p> 1)hash(哈希)</p>
<p> 2)二叉树</p>
<p> 3)红黑树</p>
<p> 4)B+树</p>
<h3 id="SQL基础"><a href="#SQL基础" class="headerlink" title="SQL基础"></a>SQL基础</h3><ol>
<li>多表联合查询</li>
</ol>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> * <span class="keyword">FROM</span> py_user u, py_paths p <span class="keyword">where</span> u.userUUID = p.userUUID;</span><br></pre></td></tr></table></figure>
<ol start="2">
<li>内连接查询(与多表联合查询效果一样)</li>
</ol>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> * <span class="keyword">FROM</span> py_user u <span class="keyword">INNER</span> <span class="keyword">JOIN</span> py_paths p <span class="keyword">ON</span> u.userUUID = p.userUUID;</span><br></pre></td></tr></table></figure>
<ol start="3">
<li>左外连接查询 (左边表中的数据优先全部显示)</li>
</ol>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> * <span class="keyword">FROM</span> py_user u <span class="keyword">LEFT</span> <span class="keyword">JOIN</span> py_paths p <span class="keyword">ON</span> u.userUUID = p.userUUID;</span><br></pre></td></tr></table></figure>
<ol start="4">
<li>右外连接查询 (右边表中的数据优先全部显示)</li>
</ol>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> * <span class="keyword">FROM</span> py_user u <span class="keyword">RIGHT</span> <span class="keyword">JOIN</span> py_paths p <span class="keyword">ON</span> u.userUUID = p.userUUID;</span><br></pre></td></tr></table></figure>
<ol start="5">
<li>全连接查询(显示左右表中全部数据,使用 UNION 可以间接实现 full JOIN 功能)</li>
</ol>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> * <span class="keyword">FROM</span> py_user u <span class="keyword">LEFT</span> <span class="keyword">JOIN</span> py_paths p <span class="keyword">ON</span> u.userUUID = p.userUUID;</span><br><span class="line">UNION</span><br><span class="line"><span class="keyword">SELECT</span> * <span class="keyword">FROM</span> py_user u <span class="keyword">RIGHT</span> <span class="keyword">JOIN</span> py_paths p <span class="keyword">ON</span> u.userUUID = p.userUUID;</span><br></pre></td></tr></table></figure>
<ol start="6">
<li>子查询(嵌套查询): 查多次,多个select</li>
</ol>
<p> 1)第一次的查询结果可以作为第二次的查询的条件或者表名使用.</p>
<p> 2)子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字. 还可以包含比较运算符:= 、 !=、&gt;&lt;</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">select</span> * <span class="keyword">from</span> (<span class="keyword">select</span> * <span class="keyword">from</span> person) <span class="keyword">as</span> 表名;</span><br></pre></td></tr></table></figure>
<ol start="7">
<li>ORDER BY 排序,ASC默认升序,降序后面接”DESC”即可</li>
</ol>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> * <span class="keyword">FROM</span> table_name <span class="keyword">ORDER</span> <span class="keyword">BY</span> column_name1, column_name2 <span class="keyword">DESC</span>;</span><br></pre></td></tr></table></figure>
<ol start="8">
<li>GROUP BY 分组,count(*) 包括所有列,返回表中的记录数</li>
</ol>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> u.userName, <span class="keyword">COUNT</span>(*) <span class="keyword">FROM</span> py_user u, py_paths p <span class="keyword">WHERE</span> u.userUUID = p.userUUID <span class="keyword">GROUP</span> <span class="keyword">BY</span> regEmail;</span><br><span class="line"></span><br><span class="line"><span class="keyword">SELECT</span> u.userName, <span class="keyword">COUNT</span>(*) <span class="keyword">FROM</span> py_user u <span class="keyword">INNER</span> <span class="keyword">JOIN</span> py_paths p <span class="keyword">ON</span> u.userUUID = p.userUUID <span class="keyword">GROUP</span> <span class="keyword">BY</span> regEmail;</span><br></pre></td></tr></table></figure>
<ol start="9">
<li>AVG() 求平均工资</li>
</ol>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="keyword">AVG</span>(salary) <span class="keyword">FROM</span> person;</span><br></pre></td></tr></table></figure>
<ol start="10">
<li>MAX() 求最大工资</li>
</ol>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="keyword">MAX</span>(salary) <span class="keyword">FROM</span> person;</span><br></pre></td></tr></table></figure>
<ol start="11">
<li>MIN() 求最小工资</li>
</ol>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> <span class="keyword">MIN</span>(salary) <span class="keyword">FROM</span> person;</span><br></pre></td></tr></table></figure>
<ol start="12">
<li>HAVING 和 WHERE 的区别</li>
</ol>
<p> 1)作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。</p>
<p> 2)WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。</p>
<p> 3)WHERE 子句不能包含聚集函数,HAVING 子句总是包含聚集函数。</p>
<p> 4)HAVING 一般跟在 GROUP BY 之后,执行记录组选择的一部分来工作的。WHERE 则是执行所有数据来工作的</p>
<p> 5)HAVING 可以用聚合函数,如 HAVING SUM(salary) &gt; 1000</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">SELECT</span> city <span class="keyword">FROM</span> weather <span class="keyword">WHERE</span> temp_lo = (<span class="keyword">SELECT</span> <span class="keyword">MAX</span>(temp_lo) <span class="keyword">FROM</span> weather);</span><br></pre></td></tr></table></figure>
</div>
<div class="kratos-copyright text-center clearfix">
<h5>本作品采用 <a rel="license nofollow" target="_blank" href="http://creativecommons.org/licenses/by-sa/4.0/">知识共享署名-相同方式共享 4.0 国际许可协议</a> 进行许可</h5>
</div>
<footer class="kratos-entry-footer clearfix">
<div class="post-like-donate text-center clearfix" id="post-like-donate">
<a class="share" href="javascript:;"><i class="fa fa-share-alt"></i> 分享</a>
<div class="share-wrap" style="display: none;">
<div class="share-group">
<a href="javascript:;" class="share-plain qq" onclick="share('qq');" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-qq"></i>
</div>
</a>
<a href="javascript:;" class="share-plain qzone" onclick="share('qzone');" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-star"></i>
</div>
</a>
<a href="javascript:;" class="share-plain weixin pop style-plain" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-weixin"></i>
</div>
<div class="share-int">
<div class="qrcode" id="wechat-qr"></div>
<p>打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮</p>
</div>
</a>
<a href="javascript:;" class="share-plain weibo" onclick="share('weibo');" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-weibo"></i>
</div>
</a>
<a href="javascript:;" class="share-plain facebook style-plain" onclick="share('facebook');" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-facebook"></i>
</div>
</a>
<a href="javascript:;" class="share-plain twitter style-plain" onclick="share('twitter');" rel="nofollow">
<div class="icon-wrap">
<i class="fa fa-twitter"></i>
</div>
</a>
</div>
<script type="text/javascript">
$(()=>{
new QRCode("wechat-qr", {
text: "https://blog.yongkj.cn/2021/01/31/java-database/",
width: 150,
height: 150,
correctLevel : QRCode.CorrectLevel.H
});
});
function share(dest) {
const qqBase = "https://connect.qq.com/widget/shareqq/index.html?";
const weiboBase = "https://service.weibo.com/share/share.php?";
const qzoneBase = "https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?";
const facebookBase = "https://www.facebook.com/sharer/sharer.php?";
const twitterBase = "https://twitter.com/intent/tweet?";
const hostUrl = "https://blog.yongkj.cn/2021/01/31/java-database/";
const title = "「数据库」";
const excerpt = `数据库事务
定义
1)数据库事务是构成单一逻辑工作单元的操作集合,包含一个或多个数据库操作,这些操作构成一个逻辑上的整体。
2)一个典型的数据库事务如下所示
1234BEGIN TRANSACTION ...`;
let _URL;
switch (dest) {
case "qq" : _URL = qqBase+"url="+hostUrl+"&title="+title+"&desc=&summary="+excerpt+"&site=cxpy"; break;
case "weibo" : _URL = weiboBase+"url="+hostUrl+"&title="+title+excerpt; break;
case "qzone" : _URL = qzoneBase+"url="+hostUrl+"&title="+title+"&desc=&summary="+excerpt+"&site=cxpy"; break;
case "facebook" : _URL = facebookBase+"u="+hostUrl; break;
case "twitter" : _URL = twitterBase+"text="+title+excerpt+"&url="+hostUrl; break;
}
window.open(_URL);
};
</script>
</div>
</div>
<div class="footer-tag clearfix">
<div class="pull-left">
<i class="fa fa-tags"></i>
<a class="tag-none-link" href="/tags/%E4%BA%8B%E5%8A%A1/" rel="tag">事务</a>, <a class="tag-none-link" href="/tags/%E6%95%B0%E6%8D%AE/" rel="tag">数据</a>, <a class="tag-none-link" href="/tags/%E6%9F%A5%E8%AF%A2/" rel="tag">查询</a>, <a class="tag-none-link" href="/tags/%E7%B4%A2%E5%BC%95/" rel="tag">索引</a>
</div>
<div class="pull-date">
<span>最后编辑:2023-05-30</span>
</div>
</div>
</footer>
</div>
<nav class="navigation post-navigation clearfix" role="navigation">
<div class="nav-previous clearfix">
<a title=" 线程" href="/2021/01/30/java-thread/">&lt; 上一篇</a>
</div>
<div class="nav-next clearfix">
<a title=" 版本控制" href="/2021/02/01/java-version-control/">下一篇 &gt;</a>
</div>
</nav>
</article>
</section>
</div>
<section id="kratos-widget-area" class="col-md-4 hidden-xs hidden-sm">
<aside id="krw-about" class="widget widget-kratos-about clearfix">
<div class="photo-background"></div>
<div class="photo-wrapper clearfix">
<div class="photo-wrapper-tip text-center">
<img class="about-photo" src="/images/avatar.webp" />
</div>
</div>
<div class="textwidget">
<ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BA%8B%E5%8A%A1"><span class="toc-number">1.</span> <span class="toc-text">数据库事务</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E8%84%8F%E8%AF%BB%E3%80%81%E5%B9%BB%E8%AF%BB%E3%80%81%E4%B8%8D%E5%8F%AF%E9%87%8D%E5%A4%8D%E8%AF%BB"><span class="toc-number">2.</span> <span class="toc-text">数据库的脏读、幻读、不可重复读</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E7%B4%A2%E5%BC%95"><span class="toc-number">3.</span> <span class="toc-text">索引</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#SQL%E5%9F%BA%E7%A1%80"><span class="toc-number">4.</span> <span class="toc-text">SQL基础</span></a></li></ol>
</div>
</aside>
<!-- Moved to about.ejs -->
<aside id="krw-categories" class="widget widget-categories clearfix">
<h4 class="widget-title"><i class="fa fa-folder"></i>分类目录</h4>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/Java%E5%AD%A6%E4%B9%A0/">Java学习</a><span class="category-list-count">12</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AC%AC%E4%B8%80%E6%AC%A1/">第一次</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%8B%B1%E8%AF%AD%E5%AD%A6%E4%B9%A0/">英语学习</a><span class="category-list-count">8</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E9%9D%A2%E8%AF%95%E7%A7%AF%E7%B4%AF/">面试积累</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E9%9F%B3%E4%B9%90%E7%A9%BA%E9%97%B4/">音乐空间</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E9%A1%B9%E7%9B%AE%E7%BB%8F%E5%8E%86/">项目经历</a><span class="category-list-count">3</span></li></ul>
</aside>
<aside id="krw-tags" class="widget widget-kratos-tags clearfix">
<h4 class="widget-title"><i class="fa fa-tags"></i>标签聚合</h4>
<div class="tag-clouds">
<a href="/tags/MySQL/" style="font-size: 0.6em;">MySQL</a> <a href="/tags/apility/" style="font-size: 0.6em;">apility</a> <a href="/tags/bus/" style="font-size: 0.6em;">bus</a> <a href="/tags/city/" style="font-size: 0.6em;">city</a> <a href="/tags/comfort/" style="font-size: 0.6em;">comfort</a> <a href="/tags/communication/" style="font-size: 0.6em;">communication</a> <a href="/tags/contribute/" style="font-size: 0.6em;">contribute</a> <a href="/tags/convenient/" style="font-size: 0.6em;">convenient</a> <a href="/tags/develop/" style="font-size: 0.6em;">develop</a> <a href="/tags/education/" style="font-size: 0.6em;">education</a> <a href="/tags/enhance/" style="font-size: 0.6em;">enhance</a> <a href="/tags/facility/" style="font-size: 0.6em;">facility</a> <a href="/tags/flight/" style="font-size: 0.6em;">flight</a> <a href="/tags/foreign/" style="font-size: 0.6em;">foreign</a> <a href="/tags/free/" style="font-size: 0.6em;">free</a> <a href="/tags/hello/" style="font-size: 0.6em;">hello</a> <a href="/tags/improve/" style="font-size: 0.8em;">improve</a> <a href="/tags/information/" style="font-size: 0.6em;">information</a>
</div>
</aside>
<aside id="krw-posts" class="widget widget-kratos-poststab">
<h4 class="widget-title"><i class="fa fa-file"></i>最新文章</h4>
<div class="tab-content">
<ul class="list-group">
<a class="list-group-item" href="/2023/06/04/mysql-interview-questions/"><i class="fa fa-book"></i> MySQL 面试题</a>
<a class="list-group-item" href="/2021/02/09/java-io-stream/"><i class="fa fa-book"></i> 输入输出流</a>
<a class="list-group-item" href="/2021/02/08/java-class-loading/"><i class="fa fa-book"></i> 类加载</a>
<a class="list-group-item" href="/2021/02/07/java-annotation/"><i class="fa fa-book"></i> 注解</a>
<a class="list-group-item" href="/2021/02/06/java-reflect/"><i class="fa fa-book"></i> 反射</a>
</ul>
</div>
</aside>
</section>
</div>
</div>
</div>
<footer>
<div id="footer">
<div class="kr-tool text-center">
<div class="tool">
<div class="box search-box">
<a href="/search/">
<span class="fa fa-search"></span>
</a>
</div>
<div class="box theme-box" id="darkmode-switch">
<span class="fa fa-adjust"></span>
</div>
</div>
<div class="box gotop-box">
<span class="fa fa-chevron-up"></span>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-6 col-md-offset-3 footer-list text-center">
<ul class="kratos-social-icons">
<li><a target="_blank" rel="nofollow" href="https://t.me/CandyUnion"><i class="fa fa-telegram"></i></a></li>
<li><a target="_blank" rel="nofollow" href="https://twitter.com/Candiinya"><i class="fa fa-twitter"></i></a></li>
<li><a target="_blank" rel="nofollow" href="https://github.com/yongkj"><i class="fa fa-github"></i></a></li>
<li><a target="_blank" rel="nofollow" href="/atom.xml"><i class="fa fa-rss"></i></a></li>
</ul>
<ul class="kratos-copyright">
<div>
<li>&copy; 2023 yongkj 版权所有.</li>
<li>本站已运行<span id="span_dt">Loading...</span></li>
</div>
<div>
<li>Theme <a href="https://github.com/Candinya/Kratos-Rebirth" target="_blank">Kratos:Rebirth</a></li>
<li>Made with&nbsp;<i class="fa fa-heart throb" style="color:#d43f57"></i>&nbsp;by <a href="https://candinya.com" target="_blank" rel="nofollow">Candinya</a>.</li>
</div>
<div>
<li>Powered by <a href="https://hexo.io" target="_blank" rel="nofollow">Hexo</a></li>
<li>Hosted on <a href="https://www.yongkj.cn" target="_blank">勇往直前</a></li>
</div>
<div>
</div>
</ul>
</div>
</div>
</div>
</div>
</footer>
</div>
</div>
<script defer src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.4/dist/js/bootstrap.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.js"></script>
<script>const notMobile = (!(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)));</script>
<div>
<canvas id="snow"></canvas>
<script async type="text/javascript" src="/js/snow.min.js"></script>
</div>
<script async src="/js/candy.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/clipboard@2.0.6/dist/clipboard.min.js"></script>
<script defer src="/js/kratosr.min.js"></script>
<script defer src="/js/pjax.min.js"></script>
<script defer src="/js/kr-dark.min.js"></script>
</body>
</html>