1. Oracle事物主要用于保持数据一致性,可以看成一个SQL块的整体,只要一个SQL语句错误,SQL块就会一起回滚,要么就是成功全部提交,事物一经提交就不能回滚了。拿来一个银行的例子来说明:
银行转账分为3步:A给B转500,A账户上减少500;B账户上增加500;向转账记录表中插入一条A向B转500的记录。
整个交易过程可以看做一个事物,任何一步出错,整个事物都将回滚,否则就会出现数据不一致的情况。
Oracle事物的基本语法有:
(1)set transaction:设置事物属性;
(2)commit :提交事物;
(3)rollback :回滚事物;
(4)savepoint:设置保存点;
(5)rollback to savepoint :回滚到保存点。
事物可分为显式事物和隐式事物。显式事物由开发者主动控制事物的提交和回滚,如常见的pl/sql语句块必须利用commit提交。隐式事物则是数据库控制的事物的提交和回滚,如DDL语句、DCL语句,或是DML语句设置了自动提交:set autocommit on,都是直接持久化到数据库。
例,修改地址后设置保存点f1,再次修改地址回滚到保存点f1.
declare
address varchar2(100);
begin
select t.stuaddress into address from stuinfo t
where t.stuid = 'sc201801001';
dbms_output.put_line(address);
update stuinfo t set t.stuaddress = '福建省厦门市001号'
where t.stuid = 'sc201801001';
select t.stuaddress into address from stuinfo t
where t.stuid = 'sc201801001';
dbms_output.put_line(address);
savepoint f1;
update stuinfo t set t.stuaddress = '福建省厦门市002号'
where t.stuid = 'sc201801001';
select t.stuaddress into address from stuinfo t where t.stuid = 'sc201801001';
dbms_output.put_line(address);
rollback to f1;
commit;
end;
2.Oracle锁用于数据共享的情景中,是一种访问机制,在访问同一资源时,防止不同事物操作同一数据时,出现数据问题。
利用Oracle锁机制,多个会话操作同一数据时,优先的会话会锁定该数据,其它会员只能等待,这有点类似操作系统中的资源互斥问题。
Oracle锁分为排它锁和共享锁。排它锁可以理解为写锁,如果一个事物给某个数据加了排它锁,其它事物就不能再对它加任何锁,直到事物完结,排它锁释放。共享锁可以理解为读锁,加了共享锁的数据,只能共享读,不能再给它加排它锁进行写操作。
Oracle锁也包括DML锁、DDL锁。其中DML锁又可细分为行级锁和表级锁。
行级锁是粒度最细的DML锁,用来控制数据行的修改、删除操作。当对表中某行数据进行修改时,需要对其加上行级排它锁,防止其它事物也对其进行修改,等数据修改完后,事物提交时,自动释放。
表级锁用来保护数据库对象结构,在修改表数据时,会对表结构加一个表级锁,不允许其它事物对表进行DDL操作。
以上就是过了一遍Oracle里的基本概念,接下来我想找一些案例或者上机试题练习一下。