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

事务操作流程

1.开启事务:明确事物的起始点(begin或者start transaction)

2.执行操作:执行SQL语句

3.判断结果:若操作都执行成功,提交事务,修改生成

若任意操作失败,回滚事务,撤销所有已经执行的修改

事务的作用:

1.保证数据的一致性:避免因部分操作成功,部分操作失败导致的数据混乱(转账扣钱,但是收款方未收到钱)

2.支持并发控制操作:通过设置隔离性协调多个用户同时操作数据库

3.提供错误恢复机制:操作失败时可通过回滚操作恢复到初始状态,减少数据损坏风险

注意事项:

1.并非所有数据库存储引擎都支持事务(比如MYSQL中的MYLSAM不支持,innoDB支持)

2.事务开启后需要尽快提交或者回滚,避免长时间占用资源导致并发性能下降

3.隔离级别越高,数据一致性最好,但并发效率可能越低。

隔离性在数据库中定义了多个并发事务之间的交互规则,用于平衡数据一致性和并发性能,

4个等级,不同的级别针对并发问题(脏读,不可重复读,幻读)的解决程度不同,

4个等级从低到高:

1.读,未提交(read uncommitted)

定义:一个事物可以读取到另一个未提交的事务所所修改的数据

问题:存在“脏读”问题(提交到未提交的“临时数据”,若对方回滚,数据无效)

场景:几乎不使用该隔离性,只适用于对数据一致性要求非常低的场景

2.读已提交(read committed)

定义:一个事物可以读取到另一个已提交的事务所所修改的数据

问题:避免“脏读”问题,存在“不可重复读”问题(同义词数据内两次连续读到同一数据,结果不一致,因中间被其他事物修改并提交)

场景:大多数数据库的默认隔离级别

3.可重复读(repeatable read)

定义:同一事务内多次读取同一数据,结果始终一致(即使其他事物修改并提交,也看不到变化)

解决:避免“脏读”“不可重复读”,存在幻读(同意书屋内两次执行范围查询,结果行数不同,因中间被其他事物插入/删除数据)

场景:Mysql中innodb默认隔离级别

4.串行性(串行化 Seriallzable)

定义:所有事务串行执行(相当于单线程,一次只能执行一个事务)

解决:避免并发事务的所有问题

场景:并发性极差,只适用于对数据一致性要求非常高,且并发性极低的场景

Mysql中隔离级别分为全局级别(对所有新会话生效)和会话级别(仅对当前会话生效)

1.查看当前会话的隔离级别

SELECT @@transaction_isolation;(8.0版本)

select @@tx_isolation; (5.7及以下)

2.查看全局的隔离级别

SELECT @@global.transacction_isolation; (8.0版本)

select @@global_isolation; (5.7及以下)

3.修改当前会话隔离级别

set session transaction isolation level +隔离级别

4.修改全局隔离级别

set global transaction isolation level +隔离级别

隔离级别名称:

READ UNCOMMITTED (读未提交)

READ COMMITTED (读已提交)

REPEATBALE READ(重复读)
SERIALIZABLE串行性

视图:是一种虚拟的表,其定义由查询语句定义

视图本身不存储数据,而是动态引用(基表)的数据,可以把试图理解成一条预定义的select。用户通过视图来间接查询基表

核心特点:

1.虚拟性:视图没有实际的物理存储,数据都来源于定义的select所涉及的基表

2.动态性:基表数据发生变化时,视图中的数据时会变化的

3.安全性:可以通过视图暴露部分信息,隐藏基表的敏感信息

4.简化性:将复杂的查询逻辑封装成视图,无需重复编写sql,直接查视图即可

适用场景:

1.简化复杂查询:对于多表关联,子查询等复杂逻辑,可封装为视图

2.数据权限控制:只允许查看到基表中的部分信息,隐藏其他信息时可以封装为视图

3.同一数据访问接口,当基表的结构变更时(如字段名修改),可通过修改视图定义保持对外接口不变

定义视图的操作:

creat view 视图名 as select 语句

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

相关文章:

  • 燕麦矮砧密植:水肥一体化系统的铺设要点
  • 打开软件出现找不到vcruntime140_clr0400.dll文件 无法运行的问题 下载修复解决
  • 字符串(String)是编程语言中一种非常基础且重要的数据类型
  • 紫薯矮砧密植:水肥一体化系统的铺设要点纪实
  • 贪吃蛇的java代码实现
  • 随机抽奖算法实现与对比:聚焦洗牌算法(Fisher-Yates)
  • 打开软件出现找不到vcruntime140d.dll文件的情况 下载修复解决
  • 外卖订餐管理系统
  • Level 2 → Level 3
  • 软件缺少vbschs.dll文件 无法启动运行的情况 下载修复
  • Flutter 混合开发实战:从 Add-to-App 到高性能双向通信的全栈集成方案
  • 外设与接口:基于内核 gpio-keys 子系统的按键处理
  • sglang 大模型推理框架支持的EAGLE 1,2,3
  • 延凡科技 EMS 智慧云平台:3 万起订阅,中小用能单位的 “云端全能源管家”
  • 拦截器注册InterceptorRegistry 实现讲解
  • 汇编语言全接触-27.工具提示控件
  • 汇编语言全接触-26.启动画面
  • 我不是这样
  • 验证IP地址(一)
  • 医院管理|基于springboot 医院管理系统(源码+数据库+文档)
  • 浅谈:算法中的斐波那契数(一)
  • 测试的“元认知”:智能体如何评估自身可靠性?
  • 10.8 总结
  • 【Hadoop+Spark+python毕设】物联网网络安全威胁数据分析系统、计算机毕业设计、包括数据爬取、数据分析、数据可视化、Hadoop、实战教学
  • 9.28总结
  • 零基础学JAVA--Day34(Map接口+HashTable+HashMap+TreeSet+TreeMap+开发中如何选择集合实现类?(重要)) - 指南
  • 电影院购票|基于springboot 电影院购票系统(源码+数据库+文档)
  • C#+VisionMaster联合开发(二)_操作流程
  • 本地部署DeepSeek
  • AI驱动的手动测试变革:赋能而非替代