事务及其使用

事务指的是由一组数据库操作语句所构成的逻辑单元,一条或多条sql语句组成这个执行单位,这个逻辑单元里的操作要么都执行,要么都不执行。

事务的特性(ACID特性)

原子性(Atomicity):事务是一个不可再分割的整体,要么都执行要么都不执行。
一致性(Consistency):一个事务可以使数据从一个一致状态转换到另外一个一致的状态。
隔离性(Isolation):事务的执行不受其他事务的干扰,多个事务互相隔离。
持久性(Durability):一个事务一旦成功提交,其对数据库的修改操作将持久化到本地。

隐式事务

又称为自动事务,是在执行SQL语句时隐式地创建和管理事务。隐式事务不需要显式的事务控制语句,数据库系统会自动为每个SQL语句创建一个事务,并根据操作的结果自动执行提交或回滚。

大多数数据库系统的默认自动提交每个SQL语句,每个SQL语句成为一个独立的事务,执行完毕自动提交,比如insert、update、delete语句等。

查看自动提交功能是否开启(默认是开启状态)

#查看自动提交功能状态
SHOW VARIABLES LIKE "autocommit";

显式事务

通过编程语言或数据库系统提供的事务控制命令来显式地开始、提交或回滚事务。

在显式事务中,开发人员通过明确的事务控制语句来定义事务的边界、操作和提交/回滚的时机。常见的示例是使用SQL语句显式地开始事务(如BEGIN或START TRANSACTION),并使用COMMIT或ROLLBACK语句来提交或回滚事务。

显式事务的使用

#语法
#1.开启事务(先关闭自动提交)
set autocommit=0;#关闭自动提交
start transaction; #显式开启事务 可以省略
/这两步可以直接利用BEGIN代替,BEGIN执行会关闭自动提交功能并开启事务

#2.编写一组逻辑sql语句
注意:sql语句支持的是insert、update、delete
#设置回滚点:用于回滚部分数据,保存部分数据
savepoint 回滚点名;

#3.结束事务
提交:commit;
回滚(撤销事务执行的操作):rollback;
回滚到指定的地方(保留回滚点之前的操作结果):rollback to 回滚点名;

案例

(1)多条sql语句组成事务执行,COMMIT直接提交事务

首先随便创建一张表,或在已有表中进行操作也行,只是为了看一下显式事务的执行流程。

CREATE TABLE IF NOT EXISTS T_demo(
id INT PRIMARY KEY AUTO_INCREMENT,
stuname VARCHAR(10) UNIQUE,
seat INT 
);

查看为空 

 

 接着自定以一个显式事务,例如:

#关闭自动提交
SET autocommit=0;
#开启事务
START TRANSACTION;
#插入数据
INSERT INTO t_demo(stuname,seat)
VALUES
("张1",11),("王2",22),("杜3",33);
#修改数据
UPDATE t_demo SET stuname = "刘1" WHERE id=2;

#在回滚点后修改数据
UPDATE t_demo SET stuname = "赵1" WHERE id=1;

COMMIT;#提交事务

执行完后查看数据如下,是我们插入并修改之后的数据

(2)不提交事务,直接回滚(撤销事务操作)

#关闭自动提交
SET autocommit=0;

#开启事务
START TRANSACTION;

#删除一条数据
DELETE FROM t_demo WHERE id =1;
#修改一条数据
UPDATE t_demo SET stuname = "lisa" WHERE id=3;

#回滚事务
ROLLBACK;

 执行完毕之后,再查看表数据,并无变化,因为事务回滚,执行结果并没有提交。

(3)回滚点的使用

还是在前表的基础上,我们执行以下事务

#关闭自动提交
SET autocommit=0;
#开启事务
START TRANSACTION;

#修改数据
UPDATE t_demo SET stuname = "回滚点a前" WHERE id=1;

#设置回滚点a
SAVEPOINT a;

#回滚点a后修改数据
UPDATE t_demo SET stuname = "回滚点a后" WHERE id=3;

#回滚到回滚点a处
ROLLBACK TO a;

执行完毕,再查看一次表中数据,如下:

 可以看到事务中回滚点a之前的操作结果会被提交,回滚点之后的操作结果则会撤销。

以上就是事务的基本使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值