0%

mysql | 事务

要么都成功,要么都失败。

事务原则 ACID

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

事务一旦提交,就不可逆。

执行事务

mysql 是默认开启事务自动提交的。

set autocommit = 0 /* 关闭 */

手动处理事务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
事务开启
start transaction 标记一个事务的开始,从这个之后的 sql 都在同一个事务内

insert
insert

提交
commit

回滚
rellback

事务结束
set autocommit = 1 开启自动提交

其它
savepoint 保存点名 /*设置一个保存点*/
rollback to savepoint 保存点名 /*回滚到保存点*/
release savepoint 保存点名 /*撤销保存点*/

整体流程是

  • 关闭自动提交
  • 开启一个事务
  • 提交
  • 开启自动提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
create table `account`(
`id` int(3) not null auto_increment,
`name` varchar(30) not null,
`money` decimal(9,2)not null,
primary key(`id`)
)engine=innodb default charset=utf8;

insert into account (`name`,`money`) values ('a',100),('b',200);

/*提交*/
set autocommit = 0;
start transaction;
update account set money=money-50 where name = 'a';
update account set money=money+50 where name = 'b';
commit;

set autocommit = 1;


/*回滚*/
set autocommit = 0;
start transaction;
update account set money=money-50 where name = 'a';
update account set money=money+50 where name = 'b';
rollback;

set autocommit = 1;
请我喝杯咖啡吧~