什么是事务
一组不可分割的操作集合
经典的例子
银行转账
--转账100元:必须同时成功或同时失败
UPDATE user_account SET balance = balance - 100 WHERE id = 1;
UPDATE user_account SET balance = balance + 100 WHERE id = 3;
mysql如何开启事务
1 不管自动提交(autocommit)是on还是false
BEGIN;或 START TRANSACTION;
update teacher set name ='seven' where id =1;
COMMIT;或ROLLBACK;
2 若autocommit是false(set session autocommit = OFF)
update teacher set name ='seven' where id =1;
COMMIT;或ROLLBACK;
3若autocommit是true(查询autocommit状态:show VARIABLES like 'autocommit' 默认是on)
则执行一行提交一行,若同时执行多条语句,开启多个事务,可以认为是在action层循环执行sql
例子是:同时执行以下sql
update teacher set name ='seven' where id =1; --sql正确
insert teacher (name1,age) value ('james',22);--sql错误
delete from teacher where name = 'seven'; --sql正确
执行结果:

Sql1:执行成功并提交,sql2:执行报错,sql3:未执行
4代码如何开启
Jdbc:connection.setAutoCommit(TRUE);
Spring:通过aop来管理
事务的ACID特性
原子性(atomicity: /,ætə'mɪsɪti/):要么全部成功,要么全部失败
一致性(consistency:/kən'sɪstənsi/):数据的可见性,中间状态对外部不可见,最初状态和最终状态对外部可见。
隔离性(isolation:/,aɪsə'leʃən/ ):一个事务未提交,其他事务是否可见,会破坏一致性。
持久性(durability:/,djʊrə'bɪləti/):事务提交后,jdbc改变是持久的:若提交成功,但jdbc对数据改变还没有执行完,发生系统故障,可以通过事务的操作日志来恢复这部分数据(先备份数据操作日志才允许事务提交)
网友评论