数据库事务介绍

  1. 事务:

    • 事务主要用来处理操作量大、复杂度高、且关联性强的数据。

    • 譬如人员管理系统,当删除一个人员时,既要删除人员的基本资料,也要删除和改人员相关的信息,如邮箱、文章等,这些数据库操作语句就构成一个事务。

    • 事务处理可以保证数据库的完整性和一致性,成批的sql语句要么全部执行,要么全都不执行,主要针对inssert,update,delete语句而设置。

    • mysql中只有innoDB支持事务。

  2. 事务操作

    2.1、开启事务:start transcation

    • 任何一条DML语句如insert、update、delete的执行就标志着事务的开启
    • 命令:begin或start transcation

    2.2、提交事务:commit transcation

    • 成功的结束,将所有的DML语句操作历史记录和底层硬盘数据进行一次同步
    • 命令:commit

    2.3、回滚事务:rollback transcation

    • 失败的结束,将所有的DML语句操作历史记录全部清空
    • 命令:rollback

    2.4、事务的自动提交

    • 之前的所有sql操作中也有事务,只是mysql自动完成了,每执行一条sql时mysql就自动提交事务

    • 如果需要手动控制事务,需要关闭事务的自动提交

      set autocommit = 0 --禁止自动提交
      set autocommit = 1 --开启自动提交
      

    2.5、示例

    create database if not exists demo_transcation;
    use demo_transcation;
    create table account(car_id int primary key,name varchar(8),money double
    )charset = utf8;insert into account values(1005,'马云','10000'),(1009,'强东',10000);--car_id为1的账号给2的账号转账
    set autocommit = 0;  --关闭自动提交
    select @@autocommit; --查看自动提交状态begin; --开启事务
    update account set money = money - 200 where car_id = 1005;
    update account set money = money + 200 where car_id = 1009;
    commit;  --提交事务
    rollback; --如果执行失败时回滚事务
    
  3. 事务(transaction)的四大特性(ACID):

    3.1 原子性(Atomicity)

    • 事务中的所有操作要么全部完成,要么全都不完成,不会结束在中间任何环节中。
    • 事务在执行过程中发生错误,会被回滚(rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

    3.2 一致性(Consistency)

    • 在事务开始之前和事务结束以后,数据库的完整性没有被破坏;即数据库从一个一致性状态转换到另一个一致性状态。

    3.3 隔离性(iaolation)

    • 并发事务之间相互影响的程度。一个事务所做的修改在最终提交以前,对其他的事务是不可见的,譬如一个事务会不会读取到另一个未提交的事务修改的数据。

    • 事务的隔离级别:

      – read uncommitted读未提交:最低级别,事务A修改了一个数据但未提交,事务B读到了事务A未提交的更新结果,如事务A提交失败,那B读到的就是脏数据。

      – read committed读提交:一个事务要等待另一个事务提交后才能读取数据,可以避免脏读,会造成不可重复读(A事务在提交事务期间读到B事务的数据时不同的)。

      – repeateable read可重复读:在开始读取数据时(事务开启时),不再允许修改操作,可避免脏读、不可重复读,但会幻读(A事务在提交前和提交后读到的数据不一致)。

      – serializable序列化:是最高的事务隔离级别,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但效率低,比较消耗数据库性能,一般不使用。

      – mysql的默认隔离级别为repeateable read

      事务隔离级别脏读不可重复读幻读
      读未提交read uncommittedyesyesyes
      不可重复读read committednoyesyes
      可重复读repeateable readnonoyes
      串行化serializablenonono
    • 事务隔离级别的操作

      --查看事务隔离级别
      show variables like '%isolation%';--设置隔离级别
      set session transcation isolation level 级别字符串set session transcation isolation level read uncommitted; --设置为读未提交
      set session transcation isolation level read committed;   --设置为读提交
      set session transcation isolation level repeateable read; --设置为可重复读
      set session transcation isolation level serializable;     --设置为串行化
      

    3.4、持久性(durability)

    • 一旦事务提交(Commit),则其所做的修改将永久保存在数据库中。即使系统发生故障,事务的结果也不会丢失。持久性通常依赖于数据库的日志系统,事务的修改操作会被记录在日志中,以便在系统恢复时能够重放这些操作

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

DevOps工程技术价值流:打造卓越项目协作的优化宝典

一、引言 解锁项目协作的无限潜力,覆盖全链路实现流畅高效。 在当今瞬息万变的商业环境中,项目协作的效率和效果直接关系到企业的竞争力和市场响应速度。DevOps工程技术价值流中的项目协作优化,不仅是技术层面的革新,更是团队协…

【JAVA毕业设计】基于Vue和SpringBoot的冬奥会科普平台

本文项目编号 T 610 ,文末自助获取源码 \color{red}{T610,文末自助获取源码} T610,文末自助获取源码 目录 一、系统介绍二、数据库设计三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状 六、核心代码6.1 查询项目类型6.…

基于的图的异常检测算法OddBall

OddBall异常检测算法出自2010年的论文《OddBall: Spotting Anomalies in Weighted Graphs》,它是一个在加权图(weighted graph)上检测异常点的算法,基本思路为计算每一个点的一度邻域特征,然后在整个图上用这些特征拟合出一个函数&#xff0c…

网络工程师教程第6版(2024年最新版)

网络工程师教程(第6版)由清华大学出版社出版,由工业和信息化部教育与考试中心组编,张永刚、王涛、高振江任主编,具体介绍如下。 相关信息: 出版社: 清华大学出版社 ISBN:9787302669197 内容简介: 本书是工业和信息化部教育与考试中心组织编写的考试用书。本书 根据…

算法复杂度——大O表示法

参考视频:常见的大O表示法有哪些?时间复杂度是什么?_哔哩哔哩_bilibili

Maven maven项目构建的生命周期 Maven安装配置 IDEA 配置 Maven

一,Maven的概述 Maven的作用:专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化的项目结构提供了一套标准化的构建流程(编译,测试,打包,发布……)提…

排序算法(基础)大全

一、排序算法的作用: 排序算法的主要作用是将一组数据按照特定的顺序进行排列,使得数据更加有序和有组织。 1. 查找效率:通过将数据进行排序,可以提高查找算法的效率。在有序的数据中,可以使用更加高效的查找算法&…

GraphLLM:基于图的框架,通过大型语言模型处理数据

GraphLLM是一个创新的框架,它允许用户通过一个或多个大型语言模型(LLM)来处理数据。这个框架不仅提供了一个强大的代理,能够执行网络搜索和运行Python代码,还提供了一套工具来抓取网页数据,并将其重新格式化…

TransFormer--解码器:概括

TransFormer--解码器:概括 假设我们想把英语句子I am good(原句)翻译成法语句子Je vais bien(目标句)。首先,将原句I am good送入编码器,使编码器 学习原句,并计算特征值。在前文中&…

3D Gaussian Splatting 代码层理解之Part1

2023 年初,来自法国蔚蓝海岸大学和 德国马克斯普朗克学会的作者发表了一篇题为“用于实时现场渲染的 3D 高斯泼溅”的论文。该论文提出了实时神经渲染的重大进步,超越了NeRF等以往方法的实用性。高斯泼溅不仅减少了延迟,而且达到或超过了 NeRF 的渲染质量,在神经渲染领域掀…

K8s学习笔记之了解k8s的网络模型

文章目录 docker 网络模型容器与容器之间,容器与宿主机之间如何通信容器访问外部网络外部网络访问容器 k8s 网络模型CNIpod 网络配置流程 k8s 热门网络插件介绍Flannel 来源Calico 来源Cilium 来源 k8s 网络插件的工作模式Flannel 的工作模式Calico 的工作模式BGP 和…

探索高效的 Prompt 框架:RBTR 提示框架的奥秘与优势

前言 在当今数字化的时代,人工智能(AI)已经成为我们生活和工作中不可或缺的一部分。而 Prompt 作为与 AI 交互的关键工具,其质量直接影响着我们获取信息的准确性和有用性。今天,我们将深入探讨一个通用的 Prompt 框架…

丹摩征文活动 | 深度学习实战:UNet模型的训练与测试详解

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 1、云实例:配置选型与启动1.1 登录注册1.2 配置 SSH 密钥对1.3 创建实例1.4 登录云实例 2、云存储:数据集上传…

# 10_ Python基础到实战一飞冲天(一)--linux基础(十)

10_ Python基础到实战一飞冲天(一)–linux基础(十)–软链接硬链接-tar-gzip-bzip2-apt-软件源 一、其他命令-04-文件软链接的演练实现 1、ubuntu 桌面文件如下图: 2、需求:文件软链接的演练(演…

Python学习27天

字典 dict{one:1,two:2,three:3} # 遍历1: # 先取出Key for key in dict:# 取出Key对应的valueprint(f"key:{key}---value:{dict[key]}")#遍历2,依次取出value for value in dict.values():print(value)# 遍历3:依次取出key,value …

【Linux】进程的优先级

进程的优先级 一.概念二.修改优先级的方法三.进程切换的大致原理:四.上下文数据的保存位置: 一.概念 cpu资源分配的先后顺序,就是指进程的优先权(priority)。 优先权高的进程有优先执行权利。配置进程优先权对多任务环…

ubuntu无密码用SCP复制文件到windows

默认情况下,ubuntu使用scp复制文件到windows需要输入密码: scp *.bin dev001@172.16.251.147:~/Desktop/. 为了解决每次复制文件都要输入密码这个问题,需要按如下操作: 1.创建ssh密钥 ssh-keygen -t ed25519 -C "xxx_xxx_xxx@hotmail.com" 2.使用scp复制公钥到w…

单片机GPIO中断+定时器 软件串口通信

单片机GPIO中断定时器 软件串口通信 解决思路代码示例 解决思路 串口波特率9600bps,每个bit约为1000000us/9600104.16us; 定时器第一次定时时间设为52us即半个bit的时间,其目的是偏移半个bit时间,之后的每104us采样并读取1bit数据。使得采样…

使用Web Components构建模块化Web应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Web Components构建模块化Web应用 使用Web Components构建模块化Web应用 使用Web Components构建模块化Web应用 引言 Web Co…

每行数据个数在变的二维数组的输出

#include<stdio.h> int main() {//定义四个一维数组int arr1[1] { 1 };int arr2[3] { 1,2,3 };int arr3[5] { 1,2,3,4,5 };int arr4[7] { 1,2,3,4,5,6,7 };//把四个一维数组放进一个二维数组int* arr[4] { arr1,arr2,arr3,arr4};//预先计算好每一个数组真实的长度in…