要么都成功,要么都失败。
在一个事件中的事:从通知开启事务,到提交事务之间,任何一句语句有错误,则哪一句语句都不应该提交。
1、事务的几个状态
1、开启事务
2、事务提交 commit()。在做事务提交和回滚前,关键的头尾是:(1)通知开启事务,false是开启(connection.setAutoCommit(false);) (2)提交或回滚(提交写在try部分,回滚写在catch中)
3、事务回滚 rollback()。事务一旦提交(commit)了,就无法回滚(rollback)了。所以,应该在提交之前判断,如果崩了就不要提交,直接回滚。
4、关闭事务
转账:
A:1千块
B:1千块
A --> B: A(900)、B(1100)
不能出现A转给了B100块钱,A成为900,但是系统崩溃了,B还没收到100块钱,出现了A900块钱,B1000块钱的情况。
1、搭建环境,进行测试
1 Create TABLE account( 2 id INT PRIMARY KEY auto_increment, 3 `name` VARCHAR(40), 4 money FLOAT 5 ); 6 INSERT INTO account(`name`,money) VALUES ('A',1000); 7 INSERT INTO account(`name`,money) VALUES ('B',1000); 8 INSERT INTO account(`name`,money) VALUES ('C',1000);