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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 十一、事务 -> 正文阅读

[大数据]十一、事务

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行, 要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成

事务是由一组SQL语句 组成的逻辑处理单元,它的ACID特性如下:

(1) 原子性(Atomicity):事务具有原子不可分割的特性,要么一起执行,要么都不执行。

(2) 一致性(Consistency):在事务开始和事务结束时,数据都保持一致状态。

(3) 隔离性(Isolation):在事务开始和结束过程中,事务保持着一定的隔离特性,保证事务不受外部并发数据操作的影响。

(4) 持久性(Durability):事务完成后,数据将会被持久化到数据库中。

?事务有两状态一个是提交【commit】,一个是回滚【rollback】。

BEGIN ; -- 开启事务 提交 commit或 回滚rollback
UPDATE account SET abalance=abalance-2000 WHERE aid=1;
UPDATE account SET abalance=abalance+2000 WHERE aid=2;
COMMIT;
或
ROLLBACK;

还可以设置打点事务,即再保存点之前的会提交,保存点之后的会回滚

START TRANSACTION ;
UPDATE account SET abalance=abalance-10 WHERE aid=1;
SAVEPOINT A;
UPDATE account SET abalance=abalance-1000 WHERE aid=1;
UPDATE account SET abalance=abalance+1000 WHERE aid=2;
ROLLBACK TO A;

事务隔离级别:一个事务对数据库修改与并行的另一个事务的隔离程度。 两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:

1、幻想读,2、不可重复读取 ,3、脏读

为了处理这些问题,SQL标准定义了以下几种事务隔离级别

脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable read××
Serializable×××

脏读:事务A读取到事务B未提交的数据。

????????比如账号1的账号金额是5000,此时事务B,将1账号的金额更改为8000,但是还未提交事务,此时事务A,查看1账号的金额,看到8000,然后事务B对操作做了回滚。事务A就读取到脏数据。

????????如果将事务的隔离级别提高到Read uncommitted,便不会产生以上情况。

不可重复读:事务A查看1账号的金额是2000,此时想再账号上减2000.但是还没操作的时候,事务B,将数据更改了,并再事务A之前提交了事务。此时事务A再次读取该数据的时候,已经改变了。

???????? 事务的隔离级别提高到Read committed时,避免了脏读,但是会造成不可重复度。大多数数据库 的默认级别就是ReadCommited.可以将事务的隔离级别提高到Repeatable read。也就是事务A读取了数据,再未提交事务的时候,事务B不能对数据进行修改。

幻读:事务A查看第一次查看记录的时候为80。此时,事务B对该记录做了更改,事务A再看的时候,发现不是80,事务A就像出现环境一样。将隔离级别提高到Serializable就可以避免幻读。

查看mysql的事务隔离级别

SELECT @@transaction_isolation; [select @@tx_isolation;]

设置mysql的事务隔离级别

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

脏读:事务A读取到事务B未提交的数据。脏数据所指的就是未提交的数据 设置事务A与事务B的隔离级别为Read uncommitted;

事务A[事务A读取到的8000就是脏数据]事务B
READ UNCOMMITTED;READ UNCOMMITTED;
select * from account ;-- 5000select * from account;--5000
begin;
update account set balance=8000 where accid=1;
select * from account ;-- 8000
rollback

?操作:事务A和事务B都设置事务的隔离级别为READ UNCOMMITTED;

事务B开启事务,并更新记录为8000,此时并未提交

事务A查看数据,看到了8000的结果。

事务B又做了回滚,此时事务A读取到的8000,就属于

不可重复读:一个事务先后读取同一条记录,而事务在两次读取之间该数据被其它事务所修改,则两次读取的数据不同,我们称之为不可重复读。 设置事务A与事务B的隔离级别为Read committed;

事务A事务B
READ COMMITTED;READ COMMITTED;
select * from account ;-- 5000select * from account;--5000
begin;
update account set balance=balance+3000 where accid=1;
COMMIT;
begin;
update account set balance=balance+3000 where accid=1;
COMMIT;
select * from account;-- 11000??select * from account;-- 8000

幻读:一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。

设置事务A与事务B的隔离级别为REPEATABLE READ;

?

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

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