<div>
<p>MySQL 一直是本人很薄弱的部分,后面会多输出 MySQL 的文章贡献给大家,毕竟 MySQL 涉及到数据存储、锁、磁盘寻道、分页等操作系统概念,而且互联网对 MySQL 的注重程度是不言而喻的,后面要加紧对 MySQL 的研究。写的如果不好,还请大家见谅。</p>
<p></p>
<div style="text-align:center;">
<img alt="fab11cff81167ee354f2c3f21afd1d41.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-a891aa9e564dc47f9f870e8cf5054d2d.png">
</div>
<p>非关系型数据库和关系型数据库区别,优势比较</p>
<p></p>
<div style="text-align:center;">
<img alt="1bfef382e8a464eb1da0be9917b1d790.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-8f0b1a5c853b43915709ab405b4d0968.png">
</div>
<p>非关系型数据库(感觉翻译不是很准确)称为 <code>NoSQL</code>,也就是 Not Only SQL,不仅仅是 SQL。非关系型数据库不需要写一些复杂的 SQL 语句,其内部存储方式是以 <code>key-value</code> 的形式存在可以把它想象成电话本的形式,每个人名(key)对应电话(value)。常见的非关系型数据库主要有 <b>Hbase、Redis、MongoDB</b> 等。非关系型数据库不需要经过 SQL 的重重解析,所以性能很高;非关系型数据库的可扩展性比较强,数据之间没有耦合性,遇见需要新加字段的需求,就直接增加一个 key-value 键值对即可。</p>
<p></p>
<div style="text-align:center;">
<img alt="22e406ab73c6e3719ff5ba403df34f71.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-b62ccff0fbf585961a632648a9d75221.png">
</div>
<p>关系型数据库以<code>表格</code>的形式存在,以<code>行和列</code>的形式存取数据,关系型数据库这一系列的行和列被称为表,无数张表组成了<code>数据库</code>,常见的关系型数据库有 <b>Oracle、DB2、Microsoft SQL Server、MySQL</b>等。关系型数据库能够支持复杂的 SQL 查询,能够体现出数据之间、表之间的关联关系;关系型数据库也支持事务,便于提交或者回滚。<br> 它们之间的劣势都是基于对方的优势来满足的。</p>
<h2>MySQL 事务四大特性</h2>
<p>一说到 MySQL 事务,你肯定能想起来四大特性:<code>原子性</code>、<code>一致性</code>、<code>隔离性</code>、<code>持久性</code>,下面再对这事务的四大特性做一个描述</p>
<ul><li><code>原子性(Atomicity)</code>: 原子性指的就是 MySQL 中的包含事务的操作要么<code>全部成功</code>、要么全部<code>失败回滚</code>,因此事务的操作如果成功就必须要全部应用到数据库,如果操作失败则不能对数据库有任何影响。</li></ul>
<blockquote>
这里涉及到一个概念,什么是 MySQL 中的事务?
<br>事务是一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务。
<br>在 MySQL 中,事务是在引擎层实现的,只有使用
<code>innodb</code> 引擎的数据库或表才支持事务。
</blockquote>
<ul><li><code>一致性(Consistency)</code>:一致性指的是一个事务在执行前后其状态一致。比如 A 和 B 加起来的钱一共是 1000 元,那么不管 A 和 B 之间如何转账,转多少次,事务结束后两个用户的钱加起来还得是 1000,这就是事务的一致性。 </li><li><code>持久性(Durability)</code>: 持久性指的是一旦事务提交,那么发生的改变就是永久性的,即使数据库遇到特殊情况比如故障的时候也不会产生干扰。</li><li><code>隔离性(Isolation)</code>:隔离性需要重点说一下,当多个事务同时进行时,就有可能出现<code>脏读(dirty read)</code>、<code>不可重复读(non-repeatable read)</code>、<code>幻读(phantom read)</code> 的情况,为了解决这些并发问题,提出了隔离性的概念。</li></ul>
<blockquote>
脏读:事务 A 读取了事务 B 更新后的数据,但是事务 B 没有提交,然后事务 B 执行回滚操作,那么事务 A 读到的数据就是脏数据
<br>不可重复读:事务 A 进行多次读取操作,事务 B 在事务 A 多次读取的过程中执行更新操作并提交,提交后事务 A 读到的数据不一致。
<br>幻读:事务 A 将数据库中所有学生的成绩由 A -> B,此时事务 B 手动插入了一条成绩为 A 的记录,在事务 A 更改完毕后,发现还有一条记录没有修改,那么这种情况就叫做出现了幻读。
</blockquote>
<p><br>SQL的隔离级别有四种,它们分别是<code>读未提交(read uncommitted)</code>、<code>读已提交(read committed)</code>、<code>可重复读(repetable read)</code> 和 <code>串行化(serializable)</code>。下面分别来解释一下。<br>读未提交:读未提交指的是一个事务在提交之前,它