事务
在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么完全成功执行,完成整个工作单元操作,要么一点也不执行。
主要作用:确保数据库的完整性。
commit 提交 rollback回滚
例如:
银行转账(业务) 张三 转账1000给李四: 执行多少条SQL, 最少两条SQL
1) update 张三的余额 -1000
2) update 李四的余额, + 1000
--使用PL/SQL 模拟转账 begin --张三余额 -60000 update account set balance = balance - 60000 where name =‘zs‘; -- 李四 + 60000 update account set balance = balance + 60000 where name =‘ls‘; commit; dbms_output.put_line(‘转账成功‘); exception when others then rollback; dbms_output.put_line(‘转账失败‘); end;
事务的开始: 从执行的第一条SQL语句开始
事务的结束: 执行commit(提交, 把数据确定写入表中),或者执行rollback(回滚, 这个事务所做的所有的sql 都撤销)
确保多条SQL语句在同一个事务中, 数据库把这个些SQL写在同一个PL/SQL,
java 程序那边: ****事务加载业务层****
行锁: 给表中的某一行数据加锁, 对修改数据(update, delete)有效, 不影响查询数据
*** commit: 没有异常,写commit(表示全部成功)
*** 出现异常, 写rollback(全部失败), 把刚刚这个事务所有的sql语句全部撤销
事务的四大特征: ACID
- 原子性(Atomicity):事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。
- 一致性(Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。
- 隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。
- 持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。