Application developer's guide


声明游标:

1、每一个游标都需要虚拟内存空间,所以每个会话的游标数量上限是根据内存可用量来决定的(虽然在这里没有绝对的强调说你必须声明几个以内)

2、对每一个会话,全系统的限制由初始化参数(名字叫 open_cursors)设定。这个参数存在于参数文件中。如:init.ora。。。

   明确的创建一个游标对于预编译一个程序提供了很多的好处,提高游标的数量也会常常降低解析频率,提高性能。如果你知道在一个给定的时间段需要多少个游标,那你就可以直接打开这些同时应用就好了。

锁的选择使用:

何时使用   行共享锁(row share) 和 行排他锁(row exclusive)

           命令: lock table emp_tab in row share mode; lock table emp_tab in row exclusive mode;

      这两个锁提供了最高级别的并发,你可以在以下情况去用这两个锁;

何时使用 共享锁

           命令:lock table emp_tab in share mode;         


何时使用 行共享排他锁(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 foreign key (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)检查,(注意:触发器中不能用SET CONSTRAINTS命令)这个命令会持续到事务的整个运行时期。

    如下情况推迟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
                              ----- -------------- -------
                               1 Corleone 10
                               2 Costanza 20
                          UPDATE emp SET deptno = deptno + 10
                           WHERE deptno = 20;
                           SELECT * FROM emp ORDER BY deptno;
                           EMPNO ENAME DEPTNO
                               ----- -------------- -------
                                 1 Corleone 10
                                 2 Costanza 30
                            COMMIT;


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

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


 与约束有关的俩视图:

    USER_CONSTRAINTS 和  USER_CONS_COLUMNS.


你可能感兴趣的:(正则表达式,table,application,insert,constraints,statistics)