加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

【2013】韩顺平Oracle记录

发布时间:2020-12-12 15:44:03 所属栏目:百科 来源:网络整理
导读:有道云笔记 连接: http://note.youdao.com/noteshare?id=3517a1795a730d3e6bc0dd3072622e16 --------------------------------------------------------------------------------------------------------------------------------------------------------

有道云笔记 连接:

http://note.youdao.com/noteshare?id=3517a1795a730d3e6bc0dd3072622e16


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下可忽略:




《笔记oracle_2

#韩顺平讲得太墨迹,先跳过oracle表查询

注意,JDBC_ODBC桥需要到“控制面板-管理-ODBC数据源”里配置。

韩老师讲得分页查询好伤啊


《笔记oracle_3

  1. 分页查询

对于oracle分页查询,最基础(不排序,不优化)的语句是:

SELECT*FROM(SELECTa.*,ROWNUMrnFROM(SELECT*FROMemp)a)WHEREROWNUM=21;

使用了三层嵌套子查询和关键字ROWNUM

2.oracle事务管理

oracle事物跟java里的synchonized块差不多。

注意,保存点回滚的前提是没有commit;否则没有办法。

注意,不手动commit,而exit对话框,会默认commit。所以,设置保存点后既不能commit也不能exit对话框。

rollback不加参数,表示回退所有操作。

Hibernate会强制dml使用事物(transact)。

egpublicvoidinsertDAO{

Connectioncnn=null;

try{

Class.forName(oracle.jdbc.driver.OracleDriver);

cnn=DriverManager.getConnection(

jdbc:oracle:thin:@127.0.0.1:1521xe,

username,password);

cnn.setAutoCommit(false);//1.设定自动提交为false

Statementsm=cnn.createStatement();

sm.excecuteUpdate(UPDATEempSETSAL=SAL-1WHEREENAME=SCOTT’”);

intk=9/0;

sm.excecuteUpdate(UPDATEempSETSAL=SAL+1WHEREENAME=SMITH’”);

cnn.commit();//2.手动cimmit

sm.close();

cnn.close();

}catch(Exceptione){

try{

cnn.rollback();//3.如果异常就rollback

}catch(Excrptionep){

ep.printStackTrace();

}

e.printStackTrace();

}

}

只读事物使管理员能够在某一时间点准确统计信息。如,上例,管理员想在18:00的时候统计机票信息;他设置了一个只读事物,然后开始写统计的sql;这期间,一定会有其他的客户想数据库中增删改,而这些操作对管理员的统计是没有影响的。只读事物在高并发系统,对管理员日常工作是很重要的。

3.oracle函数

注意,每个数据库的sql函数细节上是不同的。

注意,数据量大时,四舍五入的方式对统计的结果是比较大的。

这些函数在特定情况下用到,比如生成统计图、工程项目。

所以,在添加的时候,如果想图方便,可以将数据都加上单引号。

例如,dms系统会把每个LogRecsysdate存到数据库中;当读这些数据时,oracle默认是没有时分秒的;就需要手工转换。

再例如,某机票系统,需要查过去一小时有多少数据添加进去了。

NUMBER7,2):共7位数,但是小数点后有2位(整数5位)。

在创建用户时,oracle会自动创建跟该用户同名的方案;oracle是靠方案管理数据对象的。

  1. oracle数据库管理

45是高级dba的工作;备份和恢复是普通dba的主要工作。

调优:化腐朽为神奇;技术含量比较高。

注意,dba是越老越吃香的。

sys登陆必须加上assysdbaassysoper

system登陆可以不加as,但是这时某人是sysdba的;即把assysdba省略了。

可以注意到,system正常登陆就拥有了sysdba权限,能完成所有操作。

总结:从在oracle的地位看,sys用户的方案里存了oracle的核心数据对象;system用户则没有,也不能操作sys里的这些数据;

从权限上看,systemsys都有sysdba的角色,即都有最高的权限。

导出方案:把某用户所有的东西都导出去了;

导出数据库:把所有用户的东西都导出去。

注意,导出的dmp文件并不是文本文件,而是数据文件。

注意,直接导出方式,在数据量大时,很实用。

导入数据库、恢复(表、方案、数据库),

数据字典:系统的静态信息;

动态性能试图:系统的动态信息;

注意,数据字典能完成许多实用的查询!

以上功能也很实用。

还可以查oracle所有系统权限(140多)、对象权限(也很多)。

表空间:把一些数据文件统一起来起个名字,就是表空间。当我们在说某表在哪?的时候,不会说它在某个具体数据文件中,而是说在某表空间中。eg:人们形容某人的位置时,不会说他的经纬度,而是说他在北京。

  1. 约束

索引:在海量数据时是优化oracle速度的关键。其次才是其他因素。

注意,oracle的主键不能由2个以上的列作为联合主键。

除了按需求写约束,还应当注意的是,id一般都是char,比varchar查询速度快;价格一般是number(*,2)

性别,一般是char(2),两个字节;身份证号,char(18)

注意,增加的约束是需要起名字的,但一般名字不重要。

primarykey的时候,如果删的主键列,是另外一个表某一列的外键,那么不加cascade是一定会报错的。

一般,表级定义适合简便地写小表;列级定义适合复杂的大表,并能比较好得管理约束名。

注意,索引是人类智慧的产物,能在查找时大大减少时间;但是,建了索引就意味需要专门去维护、更新索引,额外的开销。

上例,如果经常按姓名去查询customer表,那么就可按customer(name)建个索引;数据量大时,会加快这种查询的速度。这个索引的内部实现机制是有oracle自动完成的。

注意,符合索引时,尽量把主要索引列放在后面;因为oracle扫描sql语句是从右往左扫的。

如果一个表只有三四十条,那建个索引反而会增加开销。

索引,一般只了解单列索引和符合索引即可。

这种查所有索引、约束,用SQLDeveloper等工具比手工查询方便得多。










《笔记oracle_4

pl/sql的作用:完成复杂功能查询;减少上层(JavaDAO层和业务层)代码量;减少网络传输开销;加快了系统处理速度。

还应注意:

  1. 过程、函数、触发器这几个oracle数据对象,都是由pl/sql语言写的;
  2. pl/sql是功能强大、完善的一种数据库过程语义
  3. pl/sql程序是可以在java代码中直接调用的;

传统的java项目,在做持久化时,需要先从oracle获取个connection,然后把自己写的sql语句交给数据库,这时oracle需要把传过来的语句进行再编译。这个看起来很小的时间开销,对于一个数据量大的B/S系统,提升性能很大。

由于是pl/sql把上层的需求下移到数据库端,所以,对编程能力要求比较高。例如,分页、转账、订单。

pl/sql缺点:移植性不好。除了oracle数据库,谈不上易移植性。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读