当前位置: 首页 > 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.dtcms.com/a/264338.html

相关文章:

  • OpenCV篇——项目(一)OCR识别读取银行卡号码
  • 在 Docker 容器中使用内网穿透
  • ubuntu 安装QT
  • 【python】三元表达式
  • Jeecg前端经验汇总
  • 扫描电子显微镜(SEM)夏令营面试基础题及答案
  • 五个元素一行均分三个换行且有间距,如何均分布局
  • 设计模式之上下文对象设计模式
  • 机器学习在智能金融风险评估中的应用:信用评分与欺诈检测
  • 电脑键盘不能打字了怎么解决 查看恢复方法
  • 无人机一机多控技术要点难点
  • Redis 概述及安装
  • 设计模式之组合模式
  • RabbitMQ:消息队列的轻量级王者
  • 系统安全之大模型案例分析
  • 用openCV实现基础的人脸检测与情绪识别
  • 磐维数据库panweidb3.1.0单节点多实例安装
  • 【Python】断言(assert)
  • 1.MySQL之如何定位慢查询
  • 隔离网络(JAVA)
  • 【前端】vue工程环境配置
  • linux 用户态|内核态打印函数调用进程的pid
  • OEM怎么掌握软件开发能力
  • Linux CentOS环境下Java连接MySQL数据库指南
  • Golang的代码结构设计原则与实践与模式应用
  • 解码知识整理,使您的研究更高效!
  • Java项目:基于SSM框架实现的中学教学管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • [创业之路-458]:企业经营层 - 蓝海战略 - 重构价值曲线、整合产业要素、创造新需求
  • 软件产品使用说明编写需要注意的内容避坑指南
  • Day 3:Python模块化、异常处理与包管理实战案例