美文网首页
MySQL 中事务与引擎的基础概念

MySQL 中事务与引擎的基础概念

作者: djz0306 | 来源:发表于2019-07-15 21:23 被阅读0次

在之前的文章中,建表语句后面通常都会带一个 engine myisam,从字面上来看就是将引擎设为 myisam。在 MySQL 中有几种不同的引擎,他们的作用特点各有不同。首先来看引擎的概念。

假设有一份 MySQL 笔记需要保存起来可以记在脑子里,也可以铅笔记在纸上,用原子笔记在纸上,还可以刻在石头上。在这个过程中,不变的是数据,都是笔记,变化的是存储的方式。engine 引擎也是类似的情况。engine 引擎可以理解成 MySQL 存储数据的不同方式。具体内容如下:

特点 Myisam InnoDB BDB Memory Archive
批量插入的速度 非常高
事务安全 支持 支持
全文索引 支持
锁机制 表锁 行锁 页锁 表锁 行锁
存储限制 没有 64T 没有 没有
B树索引 支持 支持 支持 支持
哈希索引 支持 支持
集群索引 支持
数据缓存 支持 支持
索引缓存 支持 支持 支持
数据可压缩 支持 支持
空间使用 N/A 非常低
内存使用 中等
外键支持 支持

引擎的详细内容,在后面的文章中再详细学习。

事务

事务有四个属性,原子性,一致性,隔离性,持久性。以支持事务安全的 InnoDB 为例,建一张表:

create table test01(uname varchar(20),money int)engine innodb charset utf8;

插入一条数据:

insert into test01 values ('zhangsan',5000),('lisi',2000);

开启事务:

start transaction;

原子性

场景一:在购物网站抢购时,商品只剩下一件,A 和 B 两人同时看到了商品,几乎同时提交购买

场景二:在银行转账时,A 给 B 转账 100 元,那么 A 账号减少 100,B 账号增加 100,转账才能算完成

像上面这种,需要 2 步或者 N 步操作,从逻辑上讲,称之为:“原子操作”。逻辑上不可分割操作要么全部成功,要么全部失败,这就是事务的原子性

将上表中李四的钱转 1000 给张三。

update test01 set money = money + 1000 where uname="zhangsan";
update test01 set money = money - 1000 where uname="lisi";

使用 commit 来提交:

commit;

提交以后张三的钱就变成了 4000,李四的就变成了 1000。提交以后再次需要再次开启事务:

start transaction;

这次李四再给张三转 500:

update test01 set money = money + 500 where uname="zhangsan";

但是在扣除李四的钱的时候,网络出现了问题,扣除失败了,以语句错误来模拟:

update test02 set money = money + 500 where uname="lisi";

在这种部分操作失败的情况下,就会回滚之前的操作:

rollback;

此时张三的钱还是 4000 并非 4500,而李四的还是 1000

一致性

一致性是指操作前后,值的变化,逻辑上成立。例如张三的减了 500 而李四的加了 300 这样是不行的。假设加了300 以后溢出来,这样也是失败

隔离性

隔离性是指,事务结束前,每一步操作带来的影响,别人看不见。例如李四给张三转 1000 ,张三打开账户等着。在李四刚刚减少 1000 的时候,张三增加 1000 以后,张三立马转走账户里的所有钱。此时若是李四点击了取消转账。

开启事务

start transaction;

张三的钱增加:

update test01 set money = money + 500 where uname="zhangsan";

若此时在另一个地方查询此时张三和李四的钱,会发现他俩的钱都没有变,还是 4000 和 1000 。此时李四也减少 500

update test01 set money = money - 500 where uname="lisi";

若此时在另一个地方查询此时张三和李四的钱,会发现他俩的钱还都没有变,还是 4000 和 1000 。

此时再提交:

commit;

若此时在另一个地方查询此时张三和李四的钱,会发现他俩的钱变成 4500 和 500 了。

持久性

持久性是指,事务一旦完成,无法撤销。例如 ATM 机器取钱,取 500 ,机器以后吐钞以后带走,此时就无法撤销了。无法撤销只能再做一次“补偿性事务”

相关文章

  • MySQL 中事务与引擎的基础概念

    在之前的文章中,建表语句后面通常都会带一个 engine myisam,从字面上来看就是将引擎设为 myisam。...

  • 谈谈Transaction——MySQL事务处理分析

    MySQL 事务基础概念/Definition of Transaction 事务(Transaction)是访问...

  • MySQL进阶——存储引擎

    上篇文章我们学习了MySQL基础——事务,这篇文章学习MySQL进阶——存储引擎。 存储引擎 存储引擎就是存储数据...

  • MySQL事务

    事务介绍 在MySQL中事务是由存储引擎实现的,而且支持事务的存储引擎不多,我们主要讲解InnoDB存储引擎中的事...

  • MySQL事务

    事务的概念 事务就是是要保证一系列操作要么全部成功,要么全部失败。 在MySQL中,事务是在引擎层实现的。MySQ...

  • [Mysql]-锁

    MySQL的事务支持 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关: MyISAM:不支...

  • (转载)通俗易懂 Mysql事物隔离(MVVC)

    MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的。 ...

  • MySQL数据库存储引擎简介

    MySQL 提供了多个存储引擎——包括处理事务安全表的引擎和处理非事务安全表的引擎,在 MySQL 中,不需要在整...

  • 详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务。 MySQL 提供了多种存储引擎来支持事务。支持事务的存储引擎有 ...

  • mysql规范

    一、基础规范【强制】使用InnoDB存储引擎解读:InnoDB存储引擎是MySQL默认存储引擎,支持事务和行级锁,...

网友评论

      本文标题:MySQL 中事务与引擎的基础概念

      本文链接:https://www.haomeiwen.com/subject/ksnokctx.html