Mysql 事物控制

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

  • 在Mysql中,只有使用了Innodb存储引擎的数据库或表才支持事物。
  • 事物用于维护数据库的完整性,保证成批的sql语句要么都执行,要么都不执行。
  • 事物用于管理insert、update和delete语句。

例如,张三在ATM机上给李四转账100元,在银行的业务系统中,主要会执行两步数据变更操作:

  1. 从张三的账号减去100元;
  2. 给李四的账户增加100元。
    试问,如果操作1执行成功,操作2执行失败会发生什么情况?

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

特性描述
原子性事物必须是原子工作单元,事物中包含的各操作要么都做,要么都不做。
一致性事物在执行完成时,必须使所有的数据都保持一致状态。
持续性事物执行完成之后,它对系统的影响是永久性的
隔离性事物独立运行。多个事物之间相互隔离,互不干扰。事物的100%隔离,会牺牲速度。

Mysql的事物控制
在默认情况下,Mysql是自动提交事物的,即每一条insert、update、delete的SQL语句提交后会立即执行commit操作。因此,要开启一个事物,可以使用start transaction或begin,或者将autocommit的值设置为0.

#autocommit的值默认为1
select @@autocommit;
#将autocommit的值设为0
set autocommit=0;
#再次查看autocommit的值
select @@autocommit;
#开启事物
start transaction;
begin;

#事物回滚、提交
rollback;
commit;
select @@autocommit;

创建表、插入数据

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

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

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;
#查看数据变化
select * from bank_account

#开启一个事物
start transaction;
#修改操作
update bank_account set balance=balance-100 where id=1;
#修改操作
update bank_account set balance=balance+100 where id=2;
#事物回滚
rollback;
#查看数据变化
select * from bank_account
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值