MYSQL_事务控制

MYSQL_事务控制

一、事务控制是什么

​ 事务(Transaction)是指作为一个逻辑工作单元执行的一系列操作,这些操作要么全部成功,要么 全部失败。事务确保对多个数据的修改作为一个单元来处理。

​ 在MySQL中,只有使用了Innodb存储引擎的数据库或表才支持事务。

​ 事务用于维护数据库的完整性,保证成批的sql语句要么都执行,要么都不执行。

​ 事务用于管理INSERT、UPDATE和DELETE语句。

例如,我在ATM机上给小王转账100元,在银行的业务系统中,主要会执行两步数据变更操作: ①从我的账户减去100元; ②给小王的账户增加100元。这里:如果操作①执行成功,操作②执行失败会发生什么情况?-----还是会失败!

二、事务的特性

​ 若数据库声称支持事务,那么该数据库必须具备ACID四个特性,即Atomicity(原子性)、 Consistency(一致性)、Isolation(隔离性)和Durability(持久性)

如下图:

MYSQL_事务控制

三、事务控制

​ 默认情况下,MySQL是自动提交事务的,即每一条INSERT、UPDATE、DELETE的SQL语句提交 后会立即执行COMMIT操作。因此,要开启一个事务,可以使用start transaction或begin,或者 将autocommit的值设置为0

MYSQL_事务控制

四、实例

select @@autocommit;

默认值为1 ,标识自动提交事务;

可以关闭,讲默认值修改为0

基础数据准备:

create table bank_account(
id int not null auto_increment primary key,
name varchar(30) comment ‘姓名’,
balance decimal(18, 2) comment ‘账户余额’
);

insert into bank_account(id, name, balance) values(1, ‘张三’, 0);
insert into bank_account(id, name, balance) values(2, ‘李四’, 0);

select * from bank_account;

update bank_account set balance=balance+1000 where id=1;

结果如下:
MYSQL_事务控制

–开启一个事务
START TRANSACTION;

–开始操作
UPDATE bank_account SET balance=balance-100 WHERE id=1;
UPDATE bank_account SET balance=balance+100 WHERE id=2;

–提交事务
COMMIT;

结果如下:
MYSQL_事务控制

–回滚事务:操作异常,可以回滚事务。不影响数据

​ --开启一个事务
​ START TRANSACTION;

​ --开始操作
​ UPDATE bank_account SET balance=balance-100 WHERE id=1;
​ UPDATE bank_account SET balance=balance+100 WHERE id=2;

​ select * from bank_account;

​ 查看执行语句后用户的金额变化。可以看到张三又扣了100,李四又增加了100

MYSQL_事务控制

​ --回滚事务

ROLLBACK;

–查看回滚后的结果

select * from bank_account;

MYSQL_事务控制