【MySQL】数据库之事务

目录

一、什么是事务

二、事务的ACID是什么?

三、有哪些典型的不一致性问题?

第一种:脏读

第二种:不可重复读

第三种:幻读

第四种:丢失更新

四、隔离级别有哪些?

(1)未提交读(Read Uncommitted(RU)):

(2)提交读(Read Committed(RC)):这是oracle 和 SQL server的默认隔离级别

(3)可重复读(Repeatable Read(RR)):---mysql默认的隔离级别

(4)串行读(Serializable):---相当于锁表

五、如何设置隔离级别?

 六、事务管理操作命令

 七、为什么我们登录MySQL的时候 每一条命令都能直接生效保存,并没有commit和rollback?


一、什么是事务

事务是一组数据库的操作序列,包含一个或多个sql操作命令(增删改),事务将所有的操作命令看做一个不可分割的整体,向数据库系统提交或撤销操作,所有操作要么执行要么不执行。

●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。
●事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。
●事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。
●事务通过事务的整体性以保证数据的一致性。
●事务能够提高在向表中更新和插入信息期间的可靠性。

总结:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

二、事务的ACID是什么?

ACID是指在可靠数据库管理系统DBMS中,事务(transaction)有四个特性,分别为原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。

  • 原子性(atomicity)

原子性是事务的基础,表示一个事务的所有的命令操作为一个单元整体,要么执行,要么不执行;

  • 一致性(consistency)

一致性是事务的目的,为了事务开始前与结束后的数据完整与一致性;

  • 隔离性(isolation)

隔离性是事务的手段,支持在多个事务并发操作的时候,访问相同的资源的时候,各自拥有独立的数据空间;

  • 持久性(durability)

持久性是事务的结果,表示在完成事务以后,事务对数据的更改将会做永久保存,不会回滚。

三、有哪些典型的不一致性问题?

当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:

第一种:脏读

脏读就是多个事务都在运行中,其中事务a修改完数据以后并没有结束事务,事务b能看到事务a的修改结果,这就是脏读。

举例实际案例中:

第二种:不可重复读

不可重复读就是多个事务在运行中,其中事务a修改了数据并提交以后,事务b能看到事务a的修改,这就是不可重复读

举例实际案例中:

第三种:幻读

幻读就是多个事务在运行过程中,事务a修改了表数据的所有行,此时事务b也插入了一条数据,并且事务b提交事务,此时事务a能看到事务b的数据,这就是幻读

 举例实际案例中:

第四种:丢失更新

丢失更新的时候,多个事务在进行中,此时事务b对某字段进行了修改并提交,此时事务a并不知情,同时对该字段进行了修改,覆盖了事务b的修改,这就是丢失更新。

  举例实际案例中:

四、隔离级别有哪些?

隔离级别分为四种,事务的隔离级别决定了事务之间可见的级别。
MySQL事务支持如下四种隔离,用以控制事务所做的修改,并将修改通告至其它并发的事务:

(1)未提交读(Read Uncommitted(RU)):

允许脏读,即允许一个事务可以看到其他事务未提交的修改。

(2)提交读(Read Committed(RC)):这是oracle 和 SQL server的默认隔离级别

允许一个事务只能看到其他事务已经提交的修改未提交的修改是不可见的。防止脏读。

(3)可重复读(Repeatable Read(RR)):---mysql默认的隔离级别

确保如果在一个事务中执行两次相同的语句,都能得到相同的结果,不管其他事务是否提交这些修改。可以防止脏读和不可重复读。有条件的不允许幻读(InnoDB存储引擎可以不允许)

(4)串行读(Serializable):---相当于锁表

完全串行化的读,将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁,读写相互都会阻塞。可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的效率

五、如何设置隔离级别?

隔离级别在MySQL中是一个变量

设置隔离级别:
set global transaction isolation level 隔离级别名称;     
#全局级别的设置,可在所有会话有效,需要重新登录才可生效set session transaction isolation level 隔离级别名称;    
#会话级别的设置,在当前会话会话中立即生效设置全局事务隔离级别:
set global transaction isolation level read committed; ##永久生效
set @@global.tx_isolation='read-committed';   #重启服务后失效设置会话事务隔离级别:
set session transaction isolation level repeatable read;
set @@session.tx_isolation='repeatable-read';  #重启服务后失效

查询隔离级别,这里的like表示模糊查询 百分号相当于通配符*的作用

查询全局事务隔离级别:
show global variables like '%isolation%';
SELECT @@global.tx_isolation;查询会话事务隔离级别:
show session variables like '%isolation%';
SELECT @@session.tx_isolation; 
SELECT @@tx_isolation;

 六、事务管理操作命令

begin;             #开启一个事务
....        create database/table    insert into    update XXX set   delete from      #事务性操作
savepoint XX;      #在事务中创建回滚点
rollback to XX;    #在事务中回滚操作到指定的回滚点位置
commit; 或 rollback;    #提交或回滚结束事务

 七、为什么我们登录MySQL的时候 每一条命令都能直接生效保存,并没有commit和rollback?

因为有自动提交事务变量!!!

如果开启自动提交事务,那么会将每一条增删改命令看做一条事务,然后自动提交,

如果说设置为0,就是关闭自动提交,那么会将登录后的所有的操作命令看做一个事务,最终需要commit提交一下,否则不生效!!

set [global/session]  autocommit = 0/1;        #0关闭自动提交,1开启自动提交
show  [global/session]  variables like 'autocommit';

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/299635.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

doris基本操作,05-Rollup

简述 Rollup类似于mysql的视图,区别在于视图并没有将数据独立存储,视图是逻辑上的连接。而Rollup将数据独立存储了,玩的是真的。当查询命中Rollup时,会从Rollup表里获取数据,提高查询效率。 操作 创建Rollup表 alt…

codeforces round 894题解 A~F

文章目录 A. Gift Carpet题目大意思路AC代码 B. Sequence Game题目大意思路AC代码 C. Flower City Fence题目大意思路AC代码 D. Ice Cream Balls题目大意思路AC代码 E. Kolya and Movie Theatre题目大意思路AC代码 F. Magic Will Save the World题目大意思路AC代码 A. Gift Car…

【软件工程】可执行文件和数据分离

一、概述 可执行文件和数据分离是一种软件设计策略,旨在将程序代码和程序使用的数据分离存储。这种方法通常用于提高软件的模块化程度和灵活性,以及方便软件的管理和维护。 在可执行文件和数据分离中,程序代码通常以可执行文件的形式存储&a…

搭建Nginx文件下载站点

一、下载Nginx 首先,确保你的服务器上已经安装了Nginx,使用编译安装,下载最新版Nginx。 wget https://nginx.org/download/nginx-1.25.3.tar.gz tar -xf nginx-1.25.3.tar.gz二、安装Fancyindex和Nginx-Fancyindex-Theme模块 # 下载Fancyin…

MyBatis:Generator

MyBatis Generator附批量操作分页查询存储过程 Generator 介绍网址:Introduction to MyBatis Generator Generator ,一个用于 MyBatis 的代码生成工具,可以根据数据库表结构自动生成对应的实体类、DAO 接口和 SQL 映射文件,提高…

java练习之abstract (抽象) final(最终) static(静态) 练习

1:分析总结:写出private、abstract、static、final之间能否联动使用,并写出分析原因 private static final 之间可以任意结合 abstract 不可以与private static final 结合使用 2:关于三个修饰符描述不正确的是(AD) A. static …

网络编程--socket编程

这里写目录标题 套接字概念通信原理总结 预备知识网络字节序简介字节转换函数 IP地址转换函数为什么单独列出函数原型sockaddr结构体 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 套接字 概念 Socket本身有插座的意思,但他是进程之间网络通…

Win10搜索功能失效用不了的解决方法

在Win10电脑中,用户点击搜索框,输入想要搜索的内容,点击搜索即可。但是,有用户遇到了搜索功能坏掉的问题,导致自己不能正常使用搜索功能。下面小编将带来Win10系统搜索功能失效用不了的简单解决方法,操作后…

【开源】基于JAVA语言的学校热点新闻推送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新闻留言模块2.4 新闻评论模块2.5 新闻收藏模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 新闻类型表3.2.2 新闻表3.2.3 新闻留言表3.2.4 新闻评论表3.2.5 新闻收藏表 四、系统展…

2024年【四川省安全员A证】及四川省安全员A证实操考试视频

题库来源:安全生产模拟考试一点通公众号小程序 四川省安全员A证是安全生产模拟考试一点通总题库中生成的一套四川省安全员A证实操考试视频,安全生产模拟考试一点通上四川省安全员A证作业手机同步练习。2024年【四川省安全员A证】及四川省安全员A证实操考…

枚举(蓝桥杯备赛系列)acwing版

枚举 前言 hello,大家好,前面一段时间已经是把acwing Linux基础课讲完了,其实那些内容完全可以带领小白入门Linux我说过如果有人留言要Linux和Windows server 配置DNS Web ftp 的内容我就做一期,但是没人留言我也就先不自作多情了…

三菱PLC开关量防抖滤波功能块

开关量防抖滤波功能块梯形图和SCL代码请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/134936233https://rxxw-control.blog.csdn.net/article/details/134936233三菱PLC防抖滤波的另一种写法如下 https://rxxw-control.blog.csdn.net/article/det…