事务指的是由一组数据库操作语句所构成的逻辑单元,一条或多条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之前的操作结果会被提交,回滚点之后的操作结果则会撤销。
以上就是事务的基本使用。