当前位置: 首页 > 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.lqws.cn/news/599617.html

相关文章:

  • sqlmap学习笔记ing(1.Easy_SQLi(时间,表单注入))
  • 位运算经典题解
  • 高并发场景下,TCP/UDP丢包的隐藏陷阱
  • c语言学习_初识c语言21
  • 伊吖学C笔记(7、地址、指针、指针数组)
  • 面试拷打-20250701
  • 新版Android Studio默认展示类成员的问题解决
  • CPU缓存一致性
  • wifi无线调试连接手机远程控制 安卓 免root控制充电
  • FFmpeg中TS与MP4格式的extradata差异详解
  • GPIO详解:不仅仅是输入输出那么简单
  • 【MyBatis保姆级教程下】万字XML进阶实战:配置指南与深度解析
  • 【AI 时代的网络爬虫新形态与防护思路研究】
  • MySQL MVCC 详解
  • 快捷设置linux主机的ip和主机名
  • 视频断点续播全栈实现:基于HTML5前端与Spring Boot后端
  • STM32——代码开发顺序
  • GORM 删除操作实战指南:从单条记录到软删除最佳实践
  • Kotlin扩展函数与属性
  • Docker 安装 Neo4j 保姆级教程
  • VuePress 使用并应用 mcommon 模板
  • 3D一览通:在线查看3D模型,让协同更简单
  • GPT-1论文阅读:Improving Language Understanding by Generative Pre-Training
  • opencv入门(4)图像创建和赋值
  • 动手学深度学习13.5. 多尺度目标检测-笔记练习(PyTorch)
  • IDE全家桶专用快捷键----------个人独家分享!!
  • MCP 协议使用核心讲解
  • 数据结构day4——栈
  • 板凳-------Mysql cookbook学习 (十一--------1)
  • 杭州来未来科技 Java 实习面经