事务控制语言 (Transaction Control Language)

一、概念

事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么不执行。

案例:转账
张三丰 1000
郭襄 1000

update 表 set 张三丰的余额=500 where name='张三丰';
update 表 set 郭襄的余额=1500 where name='郭襄';
这两条sql语句要么都执行,要么都不执行。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. 事务的创建

隐式事务:事务没有明显的开启和结束的标记
比如insert、update、delete语句

显示事务:事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用。set autocommit=0;

步骤1:开启事务

set autocommit=0;
start transaction;(可选的)
步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
……
步骤3:结束事务
commit;提交事务
rollback;回滚事务

演示事务的使用步骤:

#开启事务
SET autocommit=0;
START TRANSCATION;
#编写一组事务的语句
UPDATE account set balance=500 WHERE user_name='张无忌';
UPDATE account set balance=1500 WHERE user_name='赵敏';
#结束事务
COMMIT;

3. 数据库的隔离级别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
MySQL8.0语句:
查看当前MySQL连接的隔离级别:
SELECT @@transaction_isolation;
设置当前MySQL连接的隔离级别:
set session transaction isolation level read committed;
(这里加了session会立刻更改,不加不会立刻更改,5.7和8.0都一样)

4. 设置保存点(回滚点,savepoint)

SET autocommit=0;
START TRANSCATION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;#设置保存点
DELETE FROM account WHERE id=28;
ROLLBACK TO a;#回滚到保存点

可以看到25号删除了,28号没删除。

5. delete和truncate在事务使用时的区别?

演示delete

SET autocommit=0;
START TRANSACTION;
DELETE * FROM account;
ROLLBACK;

可以看到account中的数据并没有被删除

演示truncate

SET autocommit=0;
START TRANSACTION;
TRUNCATE TABLE account;
ROLLBACK;

可以看到account中的数据被删除了,说明truncate不支持回滚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值