1.什么是事务(AICD)?
事务通俗的说就是数据库中一系列sql操作,如果操作成功,就进行提交,如果操作失败,就回滚至sql语句操作前的状态。
2.事务的特征
- 原子性:数据库的操作要么全部操作完成,要么不操作,不能停留在中间的某个环节。
- 一致性:事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态,因此当数据库只包含成功事务提交的结果时,就能说数据库处于一致性状态。
- 持久性:事务一旦提交成功,它对数据库中对应数据的状态变更就是永久性的,不会改变。
- 隔离性:事务的隔离性是指在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰。
3.事务管理操作
建表:
create table bankaccount(
id int not null auto_increment primary key,
name varchar(10) not null,
money int ) engine=innodb,charset=utf8;
插入数据:
insert into bankaccount(name,money) values ('xiaoming',2000),('xiaoli',3000);
操作事务:
start transaction;
update bankaccount set money=money-1000 where id=1;
update bankaccount set money=money+1000 where id=2;
commit;
--该语句执行后表示成功操作,自动进行提交
start transaction;
update bankaccount set money=money-1000 where id=1;
update bankaccount set money=money+1000 where id=2;
rollback;
--该语句执行后表示失败操作,进行回滚,数据不改变
start transaction;
update bankaccount set money=money-1000 where id=1;
update bankaccount set money=money+1000 where id=3;
rollback;
--该语句执行后表示失败操作,进行回滚,数据不变改变
4.默认的事务管理
- 默认情况下,mysql的事务管理是关闭(自动事务)的,语句的结果会马上写到数据表中。
可以通过show variable like 'autocommit';来查看是否开启自动事务,值为1为自动事务已开启,为0则为关闭。
- 关闭自动事务:set autocommit =0;【关闭后需要commit来执行每一条语句,相当于开始了事务管理】
不过注意的是set autocommit针对的是会话变量,所以这个设置只在此次会话连接中生效。