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事务

事务

1.概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败

2.操作
1. 开启事务: start transaction;
2. 回滚:rollback;
3. 提交:commit;

3.MySQL数据库中事务默认自动提交

自动提交: mysql就是自动提交的,一条DML(增删改)语句会自动提交一次事务。
手动提交:Oracle 数据库默认是手动提交事务,需要先开启事务,再提交

修改事务的默认提交方式:
* 查看事务的默认提交方式:SELECT @@autocommit;
1 代表自动提交 0 代表手动提交
* 修改默认提交方式: set @@autocommit = 0;
举例:(用来做测试的表
在这里插入图片描述

#查询结果默认为 1
SELECT @@autocommit; 
#修改默认提交方式
set @@autocommit = 0;
#修改为手动提交后,不执行commit语句,不会影响数据库

#案例:张三的账户转500,到李四的账户
#开启事务--已经将自动提交修改为手动提交
START TRANSACTION
#转账
UPDATE account set balance = balance - 500 where name ='zhangsan';
UPDATE account set balance = balance + 500 where name ='lisi'

此时没有提交事务,在新建一个查询里面查询表里面的数据,得到:
在这里插入图片描述
当使用commit提交事务后,再查询就能得到修改后的数据,也就是我们预期的数据。
如果有错误,通过rollback事务回滚到开启事务之前的状态,可以有效避免对数据库的失误操作。
在这里插入图片描述

注意:InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在start transaction和commit之间,组成一个事务;

事务四大特征

  1. 原子性::一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样
  2. 持久性:当事务提交或回滚后,数据库会持久化的保存数据。
  3. 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
  4. 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

1.原子性由undo log日志来保证,因为undo log记载着数据修改前的信息。
2.持久性由redo log 日志来保证,当我们要修改数据时,MySQL是先把这条记录所在的「页」找到,然后把该页加载到内存中,将对应记录进行修改。
3. 一致性是事务的目的。而原子性,隔离性,持久性都是为了保障 【一致性】 的手段,一致性由应用程序来保证

事务的隔离级别

概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。

存在问题

  1. 脏读:一个事务,读取到另一个事务中没有提交的数据(如果使用了rollback,则另外一个事务读取到的就是一个假数据)
  2. 不可重复读(虚读):在同一个事务中,两次读取到的数据不一样(白话:我刚刚才读取到这个数据为A,转眼你就把这个数据修改为B,下次你还可能把它修改为C)。
  3. 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。

隔离级别:

  1. read uncommitted:读未提交
    * 产生的问题:脏读、不可重复读、幻读
  2. read committed:读已提交 (Oracle)
    * 产生的问题:不可重复读、幻读
  3. repeatable read:可重复读 (MySQL默认)
    * 产生的问题:幻读
  4. serializable:串行化(相当于不允许事务的并发)
    * 可以解决所有的问题

注意:隔离级别从小到大安全性越来越高,但是效率越来越低
补充:隔离级别是通过MVCC机制,给读,写操作加上锁,来解决对应问题

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:04:35  更:2022-09-15 02:06:58 
 
开发: 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 9:43:42-

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