关于MySQL事务和存储引擎10个FAQ(Frequently asked questions
什么是事务?
事务就是「一组原子性的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):“还是不存!”
这个转账的操作可以简化抽成一个事务,包含如下步骤:
- 查询CMBC账户的余额是否大于100万
- 从CMBC账户余额中减去100万
- 在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相关推荐
- MySQL事务与存储引擎相关设置
MySQL事务与存储引擎 一.事务的ACID特点 1.原子性 2.一致性 3.隔离性 4.持久性 二.事务之间的互相影响 三.事务的四大隔离 四.事务控制语句 示例 1.开启.提交事务 2.事务回滚 ...
- MySQL事务与存储引擎
文章目录 一.MySQL事务 1.事务的概念 2.事务的ACID特点 2.1 原子性(Atomicity) 2.2 一致性(Consistency) 2.3 隔离性(Isolation) 2.4 持久 ...
- mysql支持事务的存储引擎_MySQL基础(三)【MySQL事务与存储引擎】
3.1-数据库事务 什么是事务 一系列有序的数据库操作: 要么全部成功 要么全部回退到操作前的状态 中间状态对其他连接不可见 事务的基本操作: 基本操作 说明 start transaction 开始 ...
- 人工智能(mysql)—— mysql事务、存储引擎及调优
一.事务和事务回滚 事务指一件事从开始发生到结束的整个过程 事务的作用 :确保数据一致性 1.事务和事务回滚的应用 a.mysql中默认sql语句会自动commit到数据库 show ...
- MySQL数据库的索引、事务和存储引擎
目录 一.索引 1.1 索引的概念 1.2 索引的作用 1.3 创建索引的原则 1.4 索引的分类 1.5 索引的创建 1.5.1 普通索引 1.5.2 唯一索引 1.5.3 主键索引 1.5.4 组 ...
- MySQL的事务和存储引擎
目录 一. MySQL事务 1.事务的概念 2.事务的ACID特点 2.1原子性 2.2一致性 2.3隔离性 2.4持久性 3. 事务之间的相互影响 4.MySQL事务隔离级别 4.1查询全局事务隔离 ...
- 数据库之Mysql索引、事务与存储引擎
目录 1 MySQL索引 1.1 索引的概念 1.2 索引的作用 1.3 创建索引的原则依据 1.4 索引的分类和创建 普通索引 唯一索引 主键索引 组合索引(单列索引与多列索引) 全文索引(FULL ...
- 看完就懂——MySQL索引、事务与存储引擎
目录 前言 一.索引(index) 1.1 索引的概念 1.2 索引的作用 1.3 索引的优缺点 1.4 索引的分类 1.5 创建索引的原则依据 1.6 创建索引 1.6.1 普通索引 1.6.2 唯 ...
- MySQL 索引、事务与存储引擎
目录 一.MySQL 索引 1.索引的概念 2.索引的作用 3.索引的副作用 4.创建索引的原则依据 5.索引的分类和创建 1.普通索引 2.唯一索引 3.主键索引 4.组合索引(单列索引与多列索引) ...
最新文章
- 【Ubuntu】解决ubuntu系统root用户下Chrome无法启动问题
- .pyc文件还原.py文件_从镜像文件还原分区 (系统还原)
- php 完美分页,php完美分页类程序
- java 多线程 临界区_多线程编程的设计模式 临界区模式
- 自定义生成器函数模拟Python内置函数filter()
- 波士顿动力机器狗解锁“自动驾驶”,会跑步的Atlas真的很稳
- 小型英语字典(字典训练)
- hadoop无法启动DataNode问题
- edptrayicon怎么卸载_谁知道怎样删除北信源内网管理软件客户端?
- 降采样 matlab,改进型64倍降采样数字抽取滤波器的设计与仿真分析
- 前端面试需要准备什么?
- GO GOPROXY代理设置
- 2021年N1叉车司机模拟考试题库软件及全国真题汇总
- win10去掉快捷方式小箭头_快捷方式小箭头很烦人 一招教你取消
- Android状态栏详解(全网最详)
- 区块链-网络安全的未来
- Leftover Hash Lemma(LHL):剩余哈希引理
- ios系统越狱才可以享受的100项操作
- 【软件工程】02组软件工程组队项目15周工作进度汇报——课程管理小助手
- 【Java篇】第三话-你真的了解抽象类吗?