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;#回滚到保存点处

数据库的隔离级别

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:

​ 脏读:一个事务读取了其他事务还没有提交的数据
​ 不可重复读:一个事务多次读取,结果不一样
​ 幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务“插入”的数据

通过设置隔离级别来解决并发问题

隔离级别:

  1. read uncommitted:读未提交
  2. read committed:读已提交
  3. repatable read:可重复读
  4. 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;
posted @   flypiggg  阅读(42)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示