Application developer's guide

来源:互联网 发布:java多线程编程总结 编辑:程序博客网 时间:2024/06/06 04:55
Application developer's guide

声明游标:

1、每一个游标都需要虚拟内存空间,所以每个会话的游标数量上限是根据内存可用量来决定的(虽然在这里没有绝对的强调说你必须声明几个以内)
2、对每一个会话,全系统的限制由初始化参数(名字叫open_cursors)设定。这个参数存在于参数文件中。如:init.ora。。。
明确的创建一个游标对于预编译一个程序提供了很多的好处,提高游标的数量也会常常降低解析频率,提高性能。如果你知道在一个给定的时间段需要多少个游标,那你就可以直接打开这些同时应用就好了。



锁的选择使用:

1.行共享锁(row share) 和 行排他锁(row exclusive)
命令: lock table emp_tab in row share mode;
lock table emp_tab in row exclusive mode;
这两个锁提供了最高级别的并发

2.共享锁
命令:lock table emp_tab in sharemode;        

3.行共享排他锁(share row exclusive )
命令:lock table emp_tab in share row exclusive mode;



正则表达式:
主要的函数或者状态就是这四个咯:
regexp_like  用于查找字符列或者一个方案,可以在wherr子句中查询返回行,如: where regexp_like(filst_name,'ste ( v | ph ) en$ ') 这样就把first name 为steven或者stephen的两个人选出来了。。

regexp_replace 用于替换一些指定的字符串, 如: regexp_replace(country_name,'(.)' ,' \1 ')

regexp_instr

regexp_substr




数据完整性约束:

外键约束:  
alter table emp_tab add constraint constraint_name foreignkey(deptno) references dept_tab(Deptno);  
为emp_tab表 deptno列添加了外键,参照了dept_tab的Deptno列,这样只有在dept_tab内的Deptno内有值的才能插入或者更新emp_tab表。

所有的唯一或者主键约束都会有一致性索引,你可以手动创建这个索引,而不必让数据库帮你创建。你应该记得给外键加上索引,因为数据库不会自动帮你干这个。

为一个列加上默认值,有时候会大大提高性能,比如在没有加缺省值的时候是这样写的语句:if sal is not null and sal< 5000;  加上默认值就可以这样写 If sal<5000;   有些时候,一个列中有很多同样地值,这时你也该考虑给这个列加上这个出现次数最多的值,这样可以减少你插入表的时间,为你带来方便。

为父子表定义关系:

1、在外键约束上没有其他约束的情况: 这时,任何数量的子表的行可以参考相同的父表的一个键值,这个模式允许在外键上有空值。这样也就建立了父表和子表一对多的关系,比如department表中每一个部门编号都可以作为参考键,可以对应employee表中得很多员工号(作为外键),同时,还有一些员工不在任何部门中(外键为null)。

2 、在外键上有非空约束:
有时候子表外键不能为空,必须每个外键都要明确的参照一个父表的值,这个也是一对多的关系,但是每一个员工必须都属于某一个部门,不能出现有员工不在任何部门的情况。

3 、外键上的唯一性约束(UNIQUE):  
只能是一对一的关系,但是可以为空。可以和参照表的键值一一对应。

4 、外键的 非空唯一约束:
也是一对一,不能为空。



推迟一个约束检验:

你可以用 SET CONSTRAINTS 命令推迟到事物结束时进行正确性(validity)检查,(注意:触发器中不能用SETCONSTRAINTS命令)这个命令会持续到事务的整个运行时期。

如下情况推迟UNIQUE 和 FOREIGN 的约束检查:
a、表是快照
b、一些表有大量数据需要被另一个程序操作,但是返回的时候不是以相同的顺序
c、在外键上更新串联操作。

CREATE TABLE dept (
deptno NUMBER PRIMARY KEY,
dname VARCHAR2 (30)
);

CREATE TABLE emp (
empno NUMBER,
ename VARCHAR2 (30),
deptno NUMBER REFERENCES (dept),
CONSTRAINT epk PRIMARY KEY (empno) DEFERRABLE,
CONSTRAINT efk FOREIGN KEY (deptno)REFERENCES (dept.deptno)DEFERRABLE);

INSERT INTO dept VALUES (10, 'Accounting');
INSERT INTO dept VALUES (20, 'SALES');
INSERT INTO emp VALUES (1, 'Corleone', 10);
INSERT INTO emp VALUES (2, 'Costanza', 20);
COMMIT;


SET CONSTRAINT efk DEFERRED;
UPDATE dept SET deptno = deptno 10
WHERE deptno = 20;

SELECT * from emp ORDER BY deptno;
EMPNO   ENAME    DEPTNO
----- ----------- -------
    Corleone   10
    Costanza   20

UPDATE emp SET deptno = deptno 10
WHERE deptno = 20;

SELECT * FROM emp ORDER BY deptno;
EMPNO ENAME DEPTNO
----- -------------- -------
    1 Corleone10
    2 Costanza30
COMMIT;

可以考虑用一个命令让所有的约束都推迟:SET CONSTRAINTS ALL DEFERED;

对于和索引相关的约束:当你建立unique或者peimary键的时候,oracle会检查是否存在能被用来实施唯一性约束的索引,如果没有的话oracle会自己给你建一个这样的索引。

与约束有关的俩视图:
USER_CONSTRAINTS 和 USER_CONS_COLUMNS.

转自:http://blog.csdn.net/cymm_liu/article/details/6944847
0 0