12 事务
事务
TCL
Transaction Control Language 事务控制语言
事务:
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。
事务的ACID(acid)属性
1.原子性 atomicity
指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2.一致性 consistency
事务必须使数据库从一个一致性状态变换到另外一个一致性状态
3 隔离性 isolation
指事务的执行不能被其他事务干扰
4.持久性
持久性是指一个事务一旦被提交,它对数据库中的数据的改变就是永久的
事务的创建
隐式事务:事务没有明显的开启和结束的标记
比如:insert、update、delete(语句)
显式事务:事物具有明显的开启和结束的标记
前提:先设置自动提交功能为禁用
set autocommit=0;
步骤1:开启事务
set autocommit=0;
start transaction; 可选的
步骤2:编写事务中的sql语句(select isnert update delete)
语句1;
语句2;
。。。
步骤3:结束事务
commit; 提交事务
rollback;回滚事务
savapoint 节点名; 设置保存点
演示事务的步骤
#开启事务
SET autocommit=0;
START TRANSACTION;
#编写一组事务的语句
UPDATE account SET balance = 500 WHERE username='张无忌';
UPDATE account SET balance = 1500 WHERE username='赵敏';
#结束事务
COMMIT;
#演示savepoint的使用
#开启事务
SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;#设置保存点
DELETE FROM account WHERE id=28;
ROLLBACK TO a;#回滚到保存点处
数据库的隔离级别
对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:
脏读:一个事务读取了其他事务还没有提交的数据
不可重复读:一个事务多次读取,结果不一样
幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务“插入”的数据
通过设置隔离级别来解决并发问题
隔离级别:
- read uncommitted:读未提交
- read committed:读已提交
- repatable read:可重复读
- setializable:串行化
从上往下,级别增高,性能降低
Mysql支持4中事务隔离级别:默认为repatable read
oracle默认为read committed
脏读 不可重复读 幻读
read uncommitted: √ √ √
read committed: × √ √
repatable read: × × √
setializable: × × ×
查看当前的隔离级别: select @@tx_ioslation
设置当前mySQL连接的隔离级别:
set transaction isolation level read committed;
设置数据库系统的全局的隔离级别:
set global transaction isolation level read committed
delete 和 truncate 在事务使用中的区别
truncate 在事务的执行中,不支持回滚
delete 支持回滚
#演示delete
SET autocommit=0;
START TRANSACTION;
DELETE FROM account;
ROLLBACK;
#演示truncate
SET autocommit=0;
START TRANSACTION;
TRUNCATE FROM account;
ROLLBACK;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)