mysql---事务

mysql事务

事务是一个机制,一个操作序列。包含了一组数据库的操作命令,所有命令都是一个整体,向系统提交或者撤销的操作,要么都执行,要么都不执行,不可分割的单位。

事务的特点ACID:

A: 原子性 最小单位,事务里的所有条件都是一个整体,不可分割。要么都成功,要么都失败。
C:一致性 事务开始前,事务结束后,数据库的完整性约束没有被破坏。
                事务完成时,数据必须保持一致
                事务开始前,数据库中的存储数据处于一致状态
                事务进行中,数据处于不一致状态
                事务最终完成时,必须再次
脏读:一个事务能看到另一个事务未提交的内容。

隔离性:指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据的空间对数据进行修改的所有并发事务是彼此隔离,表名事务是独立的。

修改数把的事务可以另一个使用相同数据的事务开始之前访问这些数据。或者在另一个使用相同的事务结束之后访问这些数据。

mysql 隔离级别

1、未提交读(read uncommitted),能看到未提交的数据,允许脏读,允许一个事务可以看到其他事务未提交的修改。
2、提交读(read committed):事务只能查看以及提交的修改,未提交的修改是不可见的,防止脏读orcale sql-server。
3、可重复读:也就是mysql的默认隔离级别。确保如果一个事务中执行两次相同的select语句时,都能得到相同的结果,不管其他事物是否提交。可以防止脏读以及不可重复读。
4、串行读:锁表,完全串行化,每一个事物都隔离,读写阻塞。降低数据库的效率。

事务隔离级别的作用范围

1、全局(global):对所有的会话有效。
2、会话级(session):只对当前的会话有效。

查询global全局事务的隔离级别

show global variables like '%isolation';

select @@global.tx_isolation;

global永久

格式:set global transaction isolation level 隔离级别;

eg:set global transaction isolation level read uncommitted;

global临时
格式:set @@global.tx_isolation='隔离级别';

eg:set @@global.tx_isolation='read uncommitted';

session会话事务的隔离级别

show session variables like '%isolation';
select @@session.tx_isolation;

session永久
格式:set session transaction isolation level 隔离级别;

eg:set session transaction isolation level read uncommitted;


session临时
格式:set @@session.tx_isolation='隔离级别';

eg:set @@session.tx_isolation='read uncommitted';

1、不可重复读:一个事务内,多次读同一数据。前一个事务还没有结束,另一个事务也访问该数据。在一事务之内,两次查询到结果不一致。读不到相同的数据内容

set global transaction isolation level read committed;
set session transaction isolation level read committed;
flush privileges;

2、幻读:一个事务对一个表中的数据进行修改,可能会涉及到表中的全部数据
另一个事务也修改了表中数据,插入了一行新的数据。前一个事务会发现表中还有数据没有修改,类似于幻觉。
工作中只生效最终结果。

3、丢失更新:两个事务同时修改一条记录,A先记录,B也修改了记录,B一旦提交会覆盖A的结果。
 

以上三种情况,如何避免???
1、权限控制。优:定位问题,权限分割给
2、根据使用情况来使用隔离级别
     生产环境---最好是提交读和可重复读
     测试环境---无所谓
3、生产环境只能允许一个人对一个事务进行操作,其他人不允许操作。

持久性:数据一旦提交,事物的效果将被永久的保留在数据库中,而且不会被回滚。

总结:在事务管理中,原子性是基础,隔离性是手段,一致性是目的 持久性是最终的结果

事物的控制语句

1、显示开启的事务

begin
start transaction

2、提交事务

commit
commit work

3、创建回滚点

一个事务可以有多个回滚点

格式:savepoint s1;

回滚到还原点

回滚:撤销正在进行的所有未提交的修改

格式:rollback to s1;


 

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

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

相关文章

系统架构设计之云原生架构

云原生架构 一. 云原生技术介绍二. 传统架构模式 VS 云原生架构模式三. 云原生架构反模式四. 云原生架构设计原则 其它相关推荐: 软考系统架构之案例篇(架构设计相关概念) 系统架构之微服务架构 系统架构设计之微内核架构 鸿蒙操作系统架构 所属专栏:系统…

家政APP开发服务同城预约维修接单管理系统软件小程序

家政服务小程序是一个基于移动端的家政服务平台,为用户提供方便快捷的家政服务。以下是小程序的主要功能: 1. 家政服务内容展示:商家可以在小程序中展示各种家政服务项目,如清洁、保洁、保姆、月嫂、钟点工等。用户可以浏览服务信…

Ansible中的变量及加密

目录 一、变量的设定 二、变量的使用方式 1、在playbook中直接定义变量 2、在文件中定义变量 3、设定主机变量和清单变量 4、目录设定变量 5、用命令覆盖变量 6、使用数组设定变量 7、注册变量 8、事实变量 9、魔法变量 三、JINJA2模板 四、加密控制 1、创建加…

Flutter中的各种刷新小部件

1.FutureBuilder 用于处理异步操作和构建界面的非常有用的小部件。它通常与 Future 对象一起使用,用于在异步操作完成后构建界面。 import package:flutter/material.dart;void main() > runApp(MyApp());class MyApp extends StatelessWidget {overrideWidget…

Qt 插件开发详解

1.简介 Qt插件是一种扩展机制,用于将应用程序的功能模块化,并且可以在运行时动态加载和卸载。Qt框架为插件提供了一套标准的接口和管理机制,使得插件的使用和集成变得简单和灵活,通过插件机制,可以将应用程序的功能划…

C语言 DAY09 指针02

1.指针的指针 又名二维指针 语法:数据类型 **p; 示例: void fun() { int a10; int *p1 &a; int **p2 &p1; printf("p1的地址是:%p\n",p1); printf("p2的存储的地址是:%p\n",*p2); printf("p2的地…

Maven Repository使用

1.Maven Repository网站 https://mvnrepository.com/https://mvnrepository.com/ 2.查询需要的依赖 3.参考例子 <!-- https://mvnrepository.com/artifact/org.freeswitch.esl.client/org.freeswitch.esl.client --> <dependency> <groupId>org.freesw…

【k8s】资源管理命令-陈述式

一、资源管理介绍 1、资源管理概念 在kubernetes中&#xff0c;所有的内容都抽象为资源&#xff0c;用户需要通过操作资源来管理kubernetes。 //kubernetes的本质就是一个集群系统&#xff0c;用户可以在集群中部署各种服务&#xff0c;起始就是在kubernetes集群中运行一个个…

科技驱动教育!将名师智慧资产固定在系统中

文章目录 每日一句正能量前言未来教育教育趋势一、在线教育&#xff1a;打破时间和空间的限制二、混合式学习&#xff1a;结合线上和线下的优势三、项目式学习&#xff1a;以问题为导向&#xff0c;以项目为载体 科技驱动教育模式在线教育人工智能教育虚拟现实/增强现实教育游戏…

React事件处理

目录 前言 1. 添加事件处理函数 2. 传递参数 使用箭头函数 使用bind方法 3. 阻止默认行为和冒泡 阻止默认行为 阻止事件冒泡 4. 最佳实践 前言 React是一个流行的JavaScript库&#xff0c;用于构建用户界面。在React中&#xff0c;事件处理是非常重要的一部分&#xf…

非递归(迭代)遍历二叉树

前言 在树结构中我们经常使用递归算法&#xff0c;但是递归本身的特质会带来很多疑难痛点&#xff0c;比如递归过深导致爆栈&#xff0c;或者是逻辑复杂... 本文将以树的前序遍历为例&#xff0c;浅析迭代算法如何模拟递归过程。

tasks.json、launch.json、c_cpp_properties.json配置

tasks.json //tasks.json是辅助程序编译的模块&#xff0c;执行类似于在命令行输入“gcc hello.c -o hello”命令的操作 {"version": "2.0.0","tasks": [{"type": "cppbuild", //任务类型&…

Linux开源存储方案系统介绍

文章目录 开源云计算数据存储平台怎么理解云计算 存储管理和软件定义存储软件定义存储开源项目OpenSDSLibvirt Storage Management&#xff1a;OHSM&#xff08;Online Hierarchical Storage Manager&#xff09; 开源分布式存储什么是分布式存储元数据服务器数据服务器客户端 …

“深入理解Nginx的负载均衡与动静分离“

目录 引言一、Nginx简介1. Nginx的基本概念2. Nginx的特点3. Nginx的安装配置 二、Nginx搭载负载均衡三、前端项目打包四、Nginx部署前后端分离项目&#xff0c;同时实现负载均衡和动静分离总结 引言 在现代互联网应用中&#xff0c;高性能和可扩展性是至关重要的。Nginx作为一…

django 下载与安装

#django安装 pip3 install django#创建工程 django-admin startproject 名称 如&#xff1a;django-admin startproject bookmanager#django启动 python manage.py runserver python manage.py runserver 127.0.0.1:8081#数据迁移 生成迁移文件&#xff1a;python manage.py ma…

吴恩达《机器学习》2-2->2-4:代价函数

一、代价函数的概念 代价函数是在监督学习中用于评估模型的性能和帮助选择最佳模型参数的重要工具。它表示了模型的预测输出与实际目标值之间的差距&#xff0c;即建模误差。代价函数的目标是找到使建模误差最小化的模型参数。 二、代价函数的理解 训练集数据&#xff1a;假设我…

操作系统 (1)

进程的概念 进程同步/进程互斥 进程互斥的软件实现 进程互斥的硬件实现 信号量机制 生产者消费者问题 以下wei8最终情况,不可调换位置,否则会发生死锁 预防死锁 避免死锁

警惕!当心AI诈骗!

本文参照材料有&#xff1a; 鄂尔多斯新闻公众号、澎湃新闻网、搜孤新闻、腾讯网等 AI换脸诈骗实例&#xff08;就发生在近期&#xff09; 事例一&#xff1a; 近期 “AI换脸”新型诈骗频发和你视频对话的可能不是本人&#xff01; 近日&#xff0c;东胜市民李女士遭遇了冒充…

CentOS一键部署Docker

Docker官网&#xff1a;https://www.docker.com/ CentOS&#xff08;7.6&#xff09; Docker&#xff08;18.06.1&#xff09;一键安装脚本 #!/bin/bash echo "1、安装依赖..." yum -y install gcc yum -y install gcc-c##验证gcc版本 gcc -vecho "2、卸载老…

Linux shell编程学习笔记18:while循环语句

上回我们研究和探讨了Linux shell编程中for 循环语句&#xff0c;与在C/C中一样&#xff0c;for 循环语句Linux shell编程中有很多灵活的用法。今天我们来研究和探讨while循环语句。 一、数字条件循环 我们继续以for循环语句中的例子&#xff0c;计算 从1到10与2的乘积 并输出…