MySQL---事务

news/2024/11/26 8:54:33/

1. 事务操作

开启事务:Start Transaction

任何一条DML语句(insert、update、delete)执行,

标志事务的开启命令:BEGIN 或 START TRANSACTION

提交事务:Commit Transaction

成功的结束,将所有的DML语句操作历史记录和底层硬盘数据来一次同步

命令:COMMIT

回滚事务:Rollback Transaction

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

命令:ROLLBACK

所有SQL操作都有事务,只是MySQL自动完成的,每执行一条SQL时,MySQL会自动提交事务,

因此如果想要手动控制事务,则必须关闭MySQL的事务自动提交。

在MySQL中直接用 SET 来改变 MySQL 的自动提交模式:

set autocommit=0 
#禁止自动提交 
set autocommit=1 
#开启自动提交 
create database if not exists mydb12_transcation;
use mydb12_transcation;
-- 创建账户表
create table account(id int primary key, -- 账户idname varchar(20), -- 账户名money double -- 金额
);--  插入数据
insert into account values(1,'zhangsan',1000);
insert into account values(2,'lisi',1000);
-- 设置MySQL的事务为手动提交(关闭自动提交)
select @@autocommit;
set autocommit = 0;-- 模拟账户转账
-- 开启事务 
begin;
update account set money = money - 200 where name = 'zhangsan';
update account set money = money + 200 where name = 'lisi';
-- 提交事务
commit;-- 如果转账中的任何一条出现问题,则回滚事务
rollback;

2. 事务的特性

3. 事物的隔离级别

如果一个事务正在操作的数据被另一个事务修改或删除了,最后的执行结果可能无法达到预期。如

果没有隔离性还会导致其他问题。

读未提交(Read uncommitted):

一个事务可以读取另一个未提交事务的数据,最低级别,任何情况都无法保证,会造成脏读。

读已提交(Read committed):

一个事务要等另一个事务提交后才能读取数据,可避免脏读的发生,会造成不可重复读。

可重复读(Repeatable read):

在开始读取数据(事务开启)时,不再允许修改操作,可避免脏读、不可重复读的发生,但是

会造成幻读。

串行(Serializable):

最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。

但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

Mysql的默认隔离级别是Repeatable read。

 

-- 查看隔离级别 
show variables like '%isolation%’; -- 设置隔离级别
/*
set session transaction isolation level 级别字符串
级别字符串:read uncommitted、read committed、repeatable read、serializable
*/
-- 设置read uncommitted
set session transaction isolation level read uncommitted;-- 设置read committed
set session transaction isolation level read committed;-- 设置repeatable read
set session transaction isolation level repeatable read;-- 设置serializable
set session transaction isolation level serializable;

   


http://www.ppmy.cn/news/85370.html

相关文章

小电流接地系统单相接地故障选线及保护

小电流接地系统单相接地故障选线及保护 姓名[1] 【摘要】:小电流系统单相接地故障选线以及定位一直是研究的热点,本文基于小电流系统出现单相接地短路后的特征,提出利用稳态特征和暂态特征信息结合的方式进行故障选线与保护,然后利…

【数据结构】线性表之栈、队列

前言 前面两篇文章讲述了关于线性表中的顺序表与链表,这篇文章继续讲述线性表中的栈和队列。 这里讲述的两种线性表与前面的线性表不同,只允许在一端入数据,一段出数据,详细内容请看下面的文章。 顺序表与链表两篇文章的链接&…

Selenium2023最全攻略(元素操作,浏览器操作等)附完整代码!

一、元素操作方法 方法: 1、.send_keys() # 输入方法 2、.click() # 点击方法 3、.clear() # 清空方法 注意:在输入方法之前一定要清空操作!! # 导包 from time import sleep from selenium import webdriver # 实例化浏览器 driver webdriver.Chrome(…

Tomcat源码:Acceptor与Poller、PollerEvent

参考资料: 《Tomcat源码解析系列(十一)ProtocolHandler》 《Tomcat源码解析系列(十二)NioEndpoint》 前文: 《Tomcat源码:启动类Bootstrap与Catalina的加载》 《Tomcat源码:容器…

day2 嵌入式数据库之sqlite3(下)

目录 打开数据库 关闭数据库 得到错误信息的描述 API函数 回调函数 查询回调函数 不使用回调函数查询 简易学生表创建 打开数据库 int sqlite3_open(const char *filename, /* Database filename (UTF-8) */sqlite3 **ppDb /* OUT: SQLite db handle */); 参…

React Hooks useRef 源码解读+最佳实践

参考:https://juejin.cn/post/7027949526170206239 入口 下篇文章有入口源码详解,想看的可以跳转过去,这里就不放源码了,简单梳理一下流程吧 React Hooks useState 使用详解实现原理源码分析 流程 beginWork 判断组件类型&#x…

LVGL--Font

LVGL--Fonts 字体概述点阵字体概述点阵字体文件BDF 矢量字体原理矢量字体格式Type1 (PostScript Type1)TureTypeOpenType 矢量字体的清晰显示FreeType库 编码概述LVGL文档Font & Symbol 转换在线转换地址离线工具 lv_font_conv图标 字体概述 点阵字…

win11下 ‘ls‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件 及其他常见问题

前言 一直使用mac本,刚刚换了windows好多命令不知道怎么操作了,从小白做起,总结一下 有关ls ls是Linux的命令,用于列出当前目录下的文件和子目录。Windows本身是没有这条命令的,对应Windows上的命令是dir。所以你可…