当前位置: 首页 > news >正文

MySQL数据库|事务+用户和权限管理

事务

什么是事务

事务把一组SQL语句打包成一个整体,要么全部成功,要么全部失败

事务的ACID特性

Atomicity (原子性), Consistency (一致性), Isolation (隔离 性)和 Durability (持久性)

原子性:支持事务中最基本的一个特性,要么全部成功,要么全部失败,执行失败会回滚到事务开始的状态,就行没执行过一样

一致性:事务执行完成之后,保证数据正确并且符合预期

隔离性:多个事务之间不能相互影响

持久性:不论数据库是否损坏,都不会影响数据安全

事务最终要保证一致性:一致性是通过原子性,隔离性和持久性来实现的

为什么要使用事务

数据库服务是一个网络安全服务,可以同时支持多个客户端访问

例如,以张三转账为例,张三的原余额为1000,转账100完之后剩余900,此时如果张三再跟别人转账会出现数据错误,如下图所示

此时要考虑两个会话之间的隔离性,也就是说不能他们之间的修改操作不能相互影响,正确的结果就方是会话2在会话1修改的结果上在进行更新

为什么要使用事务

事务具有ACID特性,在使用数据库的过程中,对于修改只要提交成功,就可以安全保存,只要回滚就可以恢复到事务之初

如何去使用事务

查看支持事务的存储引擎

语法

START TRANSACTION 或 BEGIN 开始一个新的事务;

COMMIT 提交当前事务,并对更改持久化保存;

ROLLBACK 回滚当前事务,取消其更改;

无论提交还是回滚,事务都会关闭

实例:

事务回滚之后,事务中所有的修改都会回到事务开始之前,也就是修改被撤销

如果commit数据就会保存下来

commit之后不能再回滚,因为事务已经提交了,数据就落盘了

保存点

语法:ROLLBACK TO savapoint;

在事务执行的过程中设置保存点,回滚时指定保存点就可以把数据恢复到保存点的状态

回滚到指定节点

如果只写rollback那么数据就会回滚到事务最开始的状态,同时关闭事务

自动/手动提交事务

默认情况下事务是自动开启和提交和回滚的,一个事务中包含一条DML语句

查看当前事务是否自动提交使用以下语句

语法:show variables like 'autocommit';

可以通过以下语句设置事务为自动或手动提交

设置事务自动提交:

方式一:SET AUTOCOMMIT=1;

方式二:SET AUTOCOMMIT=ON;

设置事务手动提交

方式一:SET AUTOCOMMIT=0;

方式二:SET AUTOCOMMIT=OFF;

注意:

只要使用 START TRANSACTION 或 BEGIN 开启事务,必须要通过 COMMIT 提交才会持久 化,与是否设置 SET autocommit 无关。

手动提交模式下,不用显示开启事务,执行修改操作后,提交或回滚事务时直接使用 commit 或 rollback

已提交的事务不能回滚

手动配置重启之后就会恢复成自动提交

想要修改成永久的手动提交就要通过修改配置文件

事务与数据

事务时保证数据安全的

事务的隔离性和隔离级别

事务间不同程度的隔离,称为事务的隔离级别,在MySQL的InnoDB引擎中事务 的隔离级别有四种,性能与安全更有所侧重

READ UNCOMMITTED ,读未提交

READ COMMITTED ,读已提交

REPEATABLE READ ,可重复读(默认)

SERIALIZABLE ,串行化

安全性由低到高,性能由高到低

READ UNCOMMITTED 读未提交

对应事务中,事务A对数据进行了修改,事务B访问了事务A还没有提交的数据,这个情况叫做“脏读”,事务B访问了事务A,rollback的数据

READ COMMITTED 读已提交

事务A第一次查询了某条记录,此事务B对这条记录进行了修改并提交了,当事务A再次查询这条记录的时候,发现与第一次的查询结果不一致,这个现象叫做“不可重复读”

REPEATABLE READ 可重复读(默认)

事务A第一次查询了某个结果集,那么B以相同的查询得到的结果集与第一次不一样,这个现象就叫做“幻读”,两次同样的查询的结果得到的结果集不同

InnDB存储引擎中,使用了next-key锁,锁住了目标行和之间的间隙,解决了部分的幻读问题

SERIALIZABLE 串行化

解决了所有的数据安全问题,所有事务都是一个埃一个的执行,一个事务必须要等到上一个事务执行完成

查看和设置隔离级别

全局作用域

SELECT @@GLOBAL.transaction_isolation;

会话作用域

SELECT @@SESSION.transaction_isolation;

设置事务的隔离级别和访问模式,可以使用以下语法:

方式一

SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL 隔离等级;

方式二

SET GLOBAL[/@@GLOBAL.] transaction_isolation = 隔离等级;(注意方式中的隔离等级存在空格要用横线替换)

不同隔离级别存在的问题

读未提交与脏读

读已提交与不可重复读

事务A先对某条数据进行了查询,之后事务 B对这条数据进行了修改,并且提交( COMMIT )事务,事务A再对这条数据进行查询时,得到了事务B 修改之后的结果

可重复读与幻读

用户和权限管理

用户由两个部分构成,一个是主机名,一个是用户鸣,有序从localhost主机以root用户名登录MySQL服务器

host: 允许登录的主机,相当于白名单,如果是localhost,表示只能从本机登陆

user: 用户名

*_priv: 用户拥有的权限

authentication_string: 加密后的用户密码

权限与授权

语法:grant priv_type[, priv_type ...] on priv_level to 'user_name'@'host_name' [WITH GRANT OPTION]

回收权限

语法:REVOKE [IF EXISTS] priv_type[, priv_type] ... ON priv_level FROM 'user_name'@'host_name' [, 'user_name'@'host_name'] ...

http://www.jsqmd.com/news/612393/

相关文章:

  • 3分钟搞定30+文库下载:这款开源神器如何帮你突破平台限制?
  • Java工程师复健AOP:所有的一切都是为了不做重复的事情
  • 2026西安美睫培训市场全景解析:5家专业机构深度对比与选型指南 - 2026年企业推荐榜
  • OpenClaw+千问3.5-27B开发提效:日志分析+异常自动上报
  • 微信聊天记录永久保存的3种方法:WeChatMsg完整指南与实战技巧
  • 2026山东灭火器维修实力盘点:本地化综合服务商为何更受青睐? - 2026年企业推荐榜
  • 毕业论文排版熬到凌晨?Paperxie AI 一键搞定,本科生救星来了!
  • 探讨2026年苏州性价比高的高企认定服务,高新技术企业认定哪家合适 - 工业设备
  • 恒模约束波形设计(Constant Modulus Waveform Design)第2章 MIMO雷达波形设计基础
  • Pi0在网络安全领域的应用:异常流量检测系统
  • MySQL逻辑架构
  • 2025界面字体设计效率提升指南:Bebas Neue开源字体全解析
  • 3分钟搞定专业书籍排版:ElegantBook LaTeX模板终极指南
  • 2026年4月高压蒸汽灭菌器选购指南:主流厂家对比与国产优选品牌测评 - 品牌推荐大师1
  • R3nzSkin内存换肤技术解密:游戏客户端逆向工程的深度探索
  • 智能客服原型:OpenClaw+Qwen2.5-VL-7B处理图文咨询
  • Office Custom UI Editor:开源界面定制工具的深度探索与实践指南
  • REFramework:游戏启动崩溃问题的系统化解决方案
  • 嵌入式Linux无MMU环境开发实践与uClinux解析
  • 2026年风管配件口碑企业大盘点:你了解多少,口碑好的风管配件口碑推荐技术引领与行业解决方案解析 - 品牌推荐师
  • 嵌入式系统语音界面:Qwen3-TTS-12Hz-1.7B-CustomVoice在卓晴平台的应用
  • 3大核心功能:《工业队长》DoubleQoLMod-zh模组的智能效率优化指南
  • 团队销售效率加速器:2026优质CRM软件排名,附实战使用体验 - 毛毛鱼的夏天
  • HY-Motion 1.0免配置环境:预装PyTorch3D/CLIP/Qwen3依赖的全栈镜像
  • 极端天气来临前,真正决定交易损失大小的,往往不是预警有没有,而是气象输入质量够不够
  • 聊聊值得推荐的关节电机测试台供应商,杭州威格仪器靠谱吗? - 工业品牌热点
  • 3分钟掌握VideoDownloadHelper:轻松下载网页视频的终极解决方案
  • 阿里云微服务引擎 MSE 及 API 网关 2026 年 3 月产品动态
  • 离线OCR工具Umi-OCR:让文字识别更高效安全的本地解决方案
  • BetterNCM-Installer完全指南:从入门到精通的6个实用技巧