TCL_事务控制语言
TCL
transaction 事务 -- DML
定义为把一连串的操作作为单个逻辑工作单元处理
----- 例如:银行转账
事务特性 ACID
原子性 atomicity 所有的数据修改 要么一起执行 要么不执行
一致性 congsistency 所有的数据修改同时得到反应
隔离性 isolation 另一个事务需要在此事务结束之后才能执行
持久性 durability 数据变动是永久的
使用事务的优点:
他们保证了数据的一致性
使用事务使得数据修改更为灵活而且修改过程是可控的
即使在用户处理失败或者系统发生故障时数据仍然是安全的
事务保证DML(数据操纵语言)语句对于数据的所作的变动是一致的
隐式事务 DDL
显式事务 DCL - commit
commit 语句完成显式事务,并且使得所有的修改是永久有效的
rollback 语句终止当前事务,使得数据库返回到以前的状态
实例:
select * from student;
update student set sex = '人' where stuNo = '00011';
commit;
rollback; -- 回滚至上一commit之后
show autocommit; -- 默认off
set autoCommit on;
set autoCommit off;
create table AA(
AA char(10)
); -- 隐式commit
select * from bankcount;
-- 多条语句 事务
update bankcount set money = money - 10000 where countno = '110 000 2000 888';
update bankcount set money = money + 10000 where countno = '110 000 2000 889';
rollback;
commit;
-- rollback 定义保存点 savePoint;
SAVEPOINT aa;
update bankcount set money = money + 10000 where countno = '110 000 2000 888';
SAVEPOINT bb;
update bankcount set money = money - 10000 where countno = '110 000 2000 889';
rollback to bb; -- 回滚之保存点之后
commit;
在下列情况下,数据修改自动被回滚:
1. 系统崩溃或发生故障.
2. SQL*Plus 意外终止.
隔离性:
上锁防止多个用户同时修改数据.
上锁可以是隐式或显式的.
上锁的一些基本内容:
上锁可预防并发事务之间的破坏性的交互.
上锁是自动施行的,无须用户干预.
上锁把操作限制到可能的最小粒度.
只有在事务结束后,上锁才被解除.
DML行数据排它锁
事务排它锁