IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mysql学习笔记——事务 -> 正文阅读

[大数据]mysql学习笔记——事务

什么是事务

一个事务是一个完整的业务逻辑单元,不可再分。事务的存在是为了保证数据的完整性、安全性。

案例:实现银行账户转账业务,A向B转100元。
实现:两条update语句,A-100,B+100。

update t_act set balance = balance - 100 where actno = 'A';
update t_act set balance = balance + 100 where actno = 'B';

此业务中,上述两条DML语句必须同时成功或同时失败。这就需要用到“事务机制”

ps:
1.和事务相关的语句:DML语句(insert、delete、update)
WHY:因为DML语句与数据库的数据有关,事务机制就是为了保证数据的完整性、安全性。
2.如果所有业务都可以用一条DML语句完成那么还需要事务机制吗?
不需要。

事务机制的原理(简单理解)

举例:完成一个业务需要三条DML语句:A添加、B修改、C删除。

开启事务机制
执行A:执行成功后,将执行记录到数据库的操作历史中,并不真正添加数据
执行B:执行成功后,将执行记录到数据库的操作历史中,并不真正修改数据
执行C:执行成功后,将执行记录到数据库的操作历史中,并不真正删除数据
结束事务机制:提交事务或回滚事务
提交事务:将数据持久化到硬盘,清空操作历史数据
回滚事务:硬盘数据不改变,清空操作历史数据

简单理解就是DML语句A、B、C捆绑在一起,ABC要么同时成功,要么同时失败。

  • TCL命令:
    commit(提交)
    rollback(回滚)
    savepoint(保存点)

事务的四特性(原子、一致、隔离、持久)

  • 原子性:事务是最小单元不可再分。通过undolog实现
  • 持久性:最终数据必须持久化到硬盘中,事务才算成功。通过redolog实现
  • 隔离性:事务与事务之间具有隔离性。通过(读写锁+MVCC)来实现
  • 一致性:事务必须保持多条DML语句同时成功或同时失败。通过原子性,持久性,隔离性共同实现。

事务的隔离性(四隔离级别)

特点(以同时处理相同表数据的事务A与事务B来举例)
第一级别:read uncommitted读未提交。A未提交,B也可以看到A未提交的数据,所以会看到脏数据,脏数据是不稳定的。
第二级别:read committed读已提交。A提交了,B就可以看到,B进行时总受A影响,原始数据一经A修改并提交,那么B就不可再看到原始数据,此为不可重复读
第三级别:repeatable read可重复读。A提交了,B也提交了,B才可以看到。A与B同时进行时不受对方视觉上的影响,但看到的原始数据是幻象。系统对幻象数据的处理命令也不会报错。
第四级别:serializable序列化/串行化读。A和B不可以同时处理同一数据,要排队,解决上述所有问题,但效率低

隔离级别越高,数据库事务并发执行性能越差,能处理的操作越少。所以一般地,推荐使用REPEATABLE READ级别保证数据的读一致性。对于幻读的问题,可以通过加锁来防止。

数据库支持的隔离级别默认的隔离级别
MYSQL四种repeatable read
ORACLE只read committed、serializableread committed

mysql中演示事务和事务隔离性

一些常用命令

//mysql中事务是自动提交的,每执行一条DML就提交一次。
start transaction;      //关闭自动提交(每次commit后要重新关闭)
commit;         //手动提交命令
rollback;           //回滚到上一个commit
set global transaction isolation level 级别;//设置隔离级别,后需重启mysql
select @@global.tx_transaction; //察看隔离级别

演示read committed:

第二级别
在这里插入图片描述
演示repeatable read:
在这里插入图片描述

演示都大同小异~就不放贴图啦

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:56:57  更:2021-10-01 16:59:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:26:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码