MYSQL_事务控制
一、事务控制是什么
事务(Transaction)是指作为一个逻辑工作单元执行的一系列操作,这些操作要么全部成功,要么 全部失败。事务确保对多个数据的修改作为一个单元来处理。
在MySQL中,只有使用了Innodb存储引擎的数据库或表才支持事务。
事务用于维护数据库的完整性,保证成批的sql语句要么都执行,要么都不执行。
事务用于管理INSERT、UPDATE和DELETE语句。
例如,我在ATM机上给小王转账100元,在银行的业务系统中,主要会执行两步数据变更操作: ①从我的账户减去100元; ②给小王的账户增加100元。这里:如果操作①执行成功,操作②执行失败会发生什么情况?-----还是会失败!
二、事务的特性
若数据库声称支持事务,那么该数据库必须具备ACID四个特性,即Atomicity(原子性)、 Consistency(一致性)、Isolation(隔离性)和Durability(持久性)
如下图:
三、事务控制
默认情况下,MySQL是自动提交事务的,即每一条INSERT、UPDATE、DELETE的SQL语句提交 后会立即执行COMMIT操作。因此,要开启一个事务,可以使用start transaction或begin,或者 将autocommit的值设置为0
四、实例
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;
结果如下:
–开启一个事务
START TRANSACTION;
–开始操作
UPDATE bank_account SET balance=balance-100 WHERE id=1;
UPDATE bank_account SET balance=balance+100 WHERE id=2;
–提交事务
COMMIT;
结果如下:
–回滚事务:操作异常,可以回滚事务。不影响数据
--开启一个事务
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
--回滚事务
ROLLBACK;
–查看回滚后的结果
select * from bank_account;