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

SQL学习笔记6

事务

1、事务的概念

事务就是多个操作的集合,事务将这一串操作作为一个整体向数据库提交,要么同时操作成功,要么同时失败

在输入DML语句时,MySQL是自动将事务提交,因此要操作事务时需要手动开启

事务操作流程为:

开启事务

(若中间有错,则回滚复原并报错)

结束事务

2、事务操作

事务操作有两种方式

方式一:关闭事务自动提交,改为手动提交

查看事务提交方式:select @@ autocommit

设置事务提交方式:set @@ autocommit = 0[1]#1为自动,0为手动

提交事务:commit

回滚事务:rollback

select @@autocommit;
set @@autocommit=0;
set @@autocommit=1;
update account set deposit =deposit-1000 where name='张三';
产生错误...
update account set deposit =deposit+1000 where name='李四';commit;
rollback ;

方式二:使用关键字start transaction/begin

开启事务:start transaction/begin

提交事务:commit

回滚事务:rollback

start transaction ;
update account set deposit =deposit-1000 where name='张三';
产生错误...
update account set deposit =deposit+1000 where name='李四';
rollback ;
commit;

3、事务的四大特性

事务的四个特性,合成ACID,分别指

A:原子性:事务是最小操作单元,同一个事务下的操作要么全成功,要么全失败

C:一致性:事务完成后,表里的数据状态保持一致

 I:隔离性:数据库系统有隔离机制,并行事务之间相互独立,事务不会受外界影响

D:持久性:事务一但提交或回滚,则对数据库永久改变

4、并发事务

在运行并发事务时,会遇到三大问题,分别是:

脏读:一个事务读到另一个事务还没提交的数据(购物网站有时点进了还没发布产品的页面)

不可重复读:一个事务两次读取一样的记录,但读取的数据不一样(双十一购物,买的时候有余货,付款的时候没了)

幻读:一个事务读取数据时发现没有对应行,在插入数据时又报错说对应行存在(输入密码-密码错误-更改密码-不能输入与原密码相同的密码)

解决这三大问题可以通过更改事务隔离级别,SQL有四个等级的隔离级别,从上到下依次为:

read uncommitted :会出现问题:脏读,不可重复读,幻读

read committed(oracle默认等级):会出现问题:不可重复读,幻读

repeatable read(MySQL默认等级):会出现问题:幻读

serializable:不会出现问题

上述等级从上到下隔离等级越高,性能越差

隔离等级本质上是禁止数据库的一些并行操作,到serializable等级数据库一次只允许操作一条事务

查看数据库当前事务隔离级别:select @@ transaction_isolation;

select @@transaction_isolation;

更改数据库事务隔离级别:set [session(更改当前会话)/global(更改全局)] transaction isolation level 事务隔离等级

set transaction isolation level repeatable read ;

http://www.lryc.cn/news/578691.html

相关文章:

  • Linux基本命令篇 —— grep命令
  • python训练day46 通道注意力
  • 【Python】断言(assert)
  • 【1.7 漫画Java核心并发编程】
  • 【Unity实战】UI按钮回调管理:职责分离与持久化策略
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的抖音渠道力拓展与多渠道利润增长研究
  • react-别名路径配置
  • Git 运行.sh文件
  • Hadoop、Spark、Flink 三大大数据处理框架的能力与应用场景
  • SSVEP Next:现代化的 SSVEP 可视化 Web 快速实现
  • GPT-1论文阅读:Improving Language Understanding by Generative Pre-Training
  • OSPF虚拟链路术语一览:快速掌握网络路由
  • rocketmq 之 阿里云转本地部署实践总结
  • Rust 是什么
  • GPIO详解:不仅仅是输入输出那么简单
  • RagFlow 源码部署启动指南
  • 【文件读取】open | with | as
  • js filter()
  • 从docker-compose快速入门Docker
  • Linux安装JDK和Maven
  • Day 3:Python模块化、异常处理与包管理实战案例
  • 基于GD32 MCU的IAP差分升级方案
  • Vue基础(19)_Vue内置指令
  • STM32——代码开发顺序
  • 模型部署与推理--利用python版本onnxruntime模型部署与推理
  • (25.07)解决——ubuntu20.04系统开机黑屏,左上角光标闪烁
  • 杭州来未来科技 Java 实习面经
  • linux 用户态|内核态打印函数调用进程的pid
  • Navicat Premium x TiDB 社区体验活动 | 赢 Navicat 正版授权+限量周边+TiDB 社区积分
  • AI赋能智慧餐饮:Spring Boot+大模型实战指南