在用户进行数据更新操作(dml)事务一定会起作用。
事务的出现会保证数据的完整性、一致性。在整个事务的处理过程之中主要使用两个操作命令:
· 事务的提交(commit):是真正的向数据库之中发出更新指令;
· 事务的回滚(rollback):回滚到最初的状态。
一但用户发出了提交事务(commit)指令,那么所有的数据将被真实性的执行了更新操作。此时将无法使用 rollback
进行回滚。
在 oracle 之中,每一个连接到数据库上的用户,都使用一个 session 的概念表示。每一个 session 都拥有各自的事务
处理,这个也就是事务的隔离性。
那么如果说此时,两个 session 更新同一条数据呢?
范例:第一个 session 执行如下语句
update myemp set sal=9000 where empno=7499 ;
第一个 session 执行此语句的时候发现可以正常的提示完成,同时,此时并没有进行事务的提交或者是回滚。那么另
外一个 session 也发出了一条更新 7499 雇员的操作。
范例:第二个 session 执行如下语句
update myemp set sal=9999 where empno=7499 ;
发现此时执行之后,界面进入到了一个等待的状态。
行号:rownum
在进行数据的显示时,用户可以通过 rownum 这个伪列,动态的生成行的编号。
在 oracle 里面 rownum 主要有可以完成两个任务:
· 取得第一行数据;
· 取得前 n 行数据。
select rownum,empno,ename,job,hiredate from emp where deptno=10 and rownum=1 ; select rownum,empno,ename,job,hiredate from emp where rownum<=10 ;
范例:数据的分页显示格式 select * from ( select 列 [别名] , 列 [别名] , ... , rownum rn from 表名称 [别名] , ... where rownum<=currentpage*linesize) temp where temp.rn>(currentpage - 1) * linesize ;
行 id:rowid
现在每一行的记录都发现有自己的数据列,而除了这些数据列之外,还存在有每一行数据的唯一的物理地址,而这
个物理地址就只能够通过 rowid 取得。
那么每一个 rowid 数据都是包含有存储数据的,以:“aaar3qaaeaaaachaac”为例做一个简单解释:
· “aaar3q”:数据的对象编号;
· “aae”:数据保存的相对文件编号;
· “aaaach”:数据保存的块号;
· “aac”:保存的数据行号。
数据库之中的所有数据都是在磁盘之中,保存,所以来讲,根据不同的数据会分配不同的空间,而 rowid 就可以清
楚的记录这些空间的信息。