什么是事务?

事务就是「一组原子性的SQL查询」,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。

事务控制语法知道吗?

BEGIN 或 START TRANSACTION 显式地开启一个事务;
COMMIT / COMMIT WORK二者是等价的。提交事务,并使已对数据库进行的所有修改成为永久性的;
ROLLBACK / ROLLBACK WORK。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
SAVEPOINT identifier 在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;
RELEASE SAVEPOINT identifier 删除一个事务的保存点;
ROLLBACK TO identifier 把事务回滚到标记点;
SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE

用通俗的语言说说你理解的事务

用银行业务举个栗子,用户lemon有两银行卡,一张是招商银行CMBC的工资卡,另一张是工商银行ICBC的储蓄卡,每月5号发工资都要把招行卡的100万转到建设银行储蓄卡账户。记住这里的银行缩写后面就是对应的数据表名称,你要记不住,我给你理一理。

招商银行(CMBC):“存么?白痴!”
中国工商银行(ICBC): “爱存不存!”
中国建设银行(CCB): “存?存不?”
中国银行(BC): “不存!”
中国农业银行(ABC): “啊,不存!”
民生银行(CMSB):“存么?SB!"
兴业银行(CIB):“存一百。”
国家开发银行(CDB):“存点吧!”
汇丰银行(HSBC):“还是不存!”

这个转账的操作可以简化抽成一个事务,包含如下步骤:

  1. 查询CMBC账户的余额是否大于100万
  2. 从CMBC账户余额中减去100万
  3. 在ICBC账户余额中增加100万

以下语句对应创建了一个转账事务:

START TRANSACTION;
SELECT balance FROM CMBC WHERE username='lemon';
UPDATE CMBC SET balance = balance - 1000000.00 WHERE username = 'lemon';
UPDATE ICBC SET balance = balance + 1000000.00 WHERE username = 'lemon';
COMMIT;

事务的ACID特性是什么?

ACID其实是事务特性的英文首字母缩写,具体的含义是这样的:

  • 原子性(atomicity)
    一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作。
  • 致性(consistency)
    数据库总是从一个一致性的状态转换到另外一个一致性的状态。在前面的例子中,一致性确保了,即使在执行第三、四条语句之间时系统崩溃,CMBC账户中也不会损失100万,不然lemon要哭死因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。
  • 隔离性(isolation)
    通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时如果有其他人也准备给lemon的CMBC账户存钱,那他看到的CMBC账户里还是有100万的。
  • 持久性(durability)
    一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。持久性是个有点模糊的概念,因为实际上持久性也分很多不同的级别。有些持久性策略能够提供非常强的安全保障,而有些则未必。而且「不可能有能做到100%的持久性保证的策略」否则还需要备份做什么。

更多干货 请点击查收

关于MySQL事务和存储引擎10个FAQ(Frequently asked questions相关推荐

  1. MySQL事务与存储引擎相关设置

    MySQL事务与存储引擎 一.事务的ACID特点 1.原子性 2.一致性 3.隔离性 4.持久性 二.事务之间的互相影响 三.事务的四大隔离 四.事务控制语句 示例 1.开启.提交事务 2.事务回滚 ...

  2. MySQL事务与存储引擎

    文章目录 一.MySQL事务 1.事务的概念 2.事务的ACID特点 2.1 原子性(Atomicity) 2.2 一致性(Consistency) 2.3 隔离性(Isolation) 2.4 持久 ...

  3. mysql支持事务的存储引擎_MySQL基础(三)【MySQL事务与存储引擎】

    3.1-数据库事务 什么是事务 一系列有序的数据库操作: 要么全部成功 要么全部回退到操作前的状态 中间状态对其他连接不可见 事务的基本操作: 基本操作 说明 start transaction 开始 ...

  4. 人工智能(mysql)—— mysql事务、存储引擎及调优

    一.事务和事务回滚 事务指一件事从开始发生到结束的整个过程         事务的作用 :确保数据一致性 1.事务和事务回滚的应用 a.mysql中默认sql语句会自动commit到数据库 show  ...

  5. MySQL数据库的索引、事务和存储引擎

    目录 一.索引 1.1 索引的概念 1.2 索引的作用 1.3 创建索引的原则 1.4 索引的分类 1.5 索引的创建 1.5.1 普通索引 1.5.2 唯一索引 1.5.3 主键索引 1.5.4 组 ...

  6. MySQL的事务和存储引擎

    目录 一. MySQL事务 1.事务的概念 2.事务的ACID特点 2.1原子性 2.2一致性 2.3隔离性 2.4持久性 3. 事务之间的相互影响 4.MySQL事务隔离级别 4.1查询全局事务隔离 ...

  7. 数据库之Mysql索引、事务与存储引擎

    目录 1 MySQL索引 1.1 索引的概念 1.2 索引的作用 1.3 创建索引的原则依据 1.4 索引的分类和创建 普通索引 唯一索引 主键索引 组合索引(单列索引与多列索引) 全文索引(FULL ...

  8. 看完就懂——MySQL索引、事务与存储引擎

    目录 前言 一.索引(index) 1.1 索引的概念 1.2 索引的作用 1.3 索引的优缺点 1.4 索引的分类 1.5 创建索引的原则依据 1.6 创建索引 1.6.1 普通索引 1.6.2 唯 ...

  9. MySQL 索引、事务与存储引擎

    目录 一.MySQL 索引 1.索引的概念 2.索引的作用 3.索引的副作用 4.创建索引的原则依据 5.索引的分类和创建 1.普通索引 2.唯一索引 3.主键索引 4.组合索引(单列索引与多列索引) ...

最新文章

  1. 【Ubuntu】解决ubuntu系统root用户下Chrome无法启动问题
  2. .pyc文件还原.py文件_从镜像文件还原分区 (系统还原)
  3. php 完美分页,php完美分页类程序
  4. java 多线程 临界区_多线程编程的设计模式 临界区模式
  5. 自定义生成器函数模拟Python内置函数filter()
  6. 波士顿动力机器狗解锁“自动驾驶”,会跑步的Atlas真的很稳
  7. 小型英语字典(字典训练)
  8. hadoop无法启动DataNode问题
  9. edptrayicon怎么卸载_谁知道怎样删除北信源内网管理软件客户端?
  10. 降采样 matlab,改进型64倍降采样数字抽取滤波器的设计与仿真分析
  11. 前端面试需要准备什么?
  12. GO GOPROXY代理设置
  13. 2021年N1叉车司机模拟考试题库软件及全国真题汇总
  14. win10去掉快捷方式小箭头_快捷方式小箭头很烦人 一招教你取消
  15. Android状态栏详解(全网最详)
  16. 区块链-网络安全的未来
  17. Leftover Hash Lemma(LHL):剩余哈希引理
  18. ios系统越狱才可以享受的100项操作
  19. 【软件工程】02组软件工程组队项目15周工作进度汇报——课程管理小助手
  20. 【Java篇】第三话-你真的了解抽象类吗?

热门文章

  1. java 签名 apk mac_java 方法签名
  2. 13、计算机图形学——阴影贴图
  3. ‘fopen‘: this function or variable may be unsafe.
  4. mqtt 串口_MQTT网关介绍及应用原理
  5. Java中生产者与消费者问题的演变
  6. SpringBoot2.0之 个性化Banner
  7. NSOperation下载网络图片(四)
  8. 一款基于jquery和css3的头像恶搞特效
  9. AS4下搭建cacti
  10. CCNet 的 Build 流程