要么都成功,要么都失败。
事务原则 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;
|