oracle 备忘

发布于 2017-07-13  265 次阅读


  • jdbc:oracle:thin:@localhost:1512:orcl
  • jdbc:oracle:oci:@localhost:1512:orcl 需要安装oracle客户机
  • 别名用双引号,单引号会报错
  • 字符串和日期包在单引号中
  • 大小写敏感,日期格式敏感
  • 默认日期格式DD-MON-RR 17-11月-81
  • 赋值 :=
  • like '%_%' 下划线表示任意一个字符,这个like写法是任意字符串,\是转义like '%\_%'
  • rollback; 回滚
  • sql优化:where解析顺序从 右→左
  • nulls last 排序时候加,表示空值在最后,oracle中null最大
  • sql优化:使用列名代替*
  • sql中包含null值的表达式都为null
  • null永远!=null 判断是否为null 使用 is null
  • distinct作用于后面所有的列
  • oracle必要要有from的表,所以使用dual伪表
  • connect by 层次查询 递归查询
      select level,empno,ename,mgr
      from emp
      connect by prior empno=mgr
      start with mgr is null
      order by 1;
    
  • delete 和 truncate区别
    1. delete是逐条删除 truncate先摧毁表 再重建
    2. delete是DML语句(可以回滚) truncate是DDL语句(不可以回滚)
    3. delete会产生碎片 truncate不会产生碎片
    4. delete不会释放空间 truncate会
    5. delete可以闪回(flashback) truncate不可以
    6. mysql中truncate快 oracle 中delete快 oracle中delete不是真正删掉是换个地方存(undo表空间)
  • 去掉碎片
    1. alert table <表名> move
    2. 数据导入导出
  • 查看回收站
      show recyclebin;
    
  • 清空回收站
      purge  recyclebin;
    

函数

  • navnav(stock,0) 如果 stock为null 转换成0
  • concat 连接 也可以用 ||连接符连接
  • selectt to_char(sysdate,'yyyy-mm-dd hh24') from dual
  • 日期加减进行计算日期 select sysdate-1 as 昨天 from dual

多行函数

子查询

集合运算

分页

 select *
 from     (select rownum r,e1.*
     from (select * from emp order by sal) e1
      where rownum <=8
    )
 where r >=5;

海量数据插入

  1. 数据泵
  2. SQL*Loader
  3. 外部表

事务

  • Oracle中事务的标志
    
    1. 起始标志: 事务中第一条DML语句
    2. 结束标志:提交   显式 commit
                      隐式 正常退出exit,DDL,DCL
               回滚   显式 rollback
                      隐式 非正常退出,掉电,宕机
    
  • 控制事务

    定义保存点 savepoint a; 回滚到保存点 rollback to savepoint a;

  • 事务的隔离级别

SQL的类型

  1. DML(Data Manipulation Language 数据操作语言):insert update delete select
  2. DDL(Data Definition Language 数据定义语言): create/drop/alter/truncate table create/drop view,sequence,index,synonym(同义词)
  3. DCL(Data Control Langauge 数据控制语言): grant(授权) revoke(撤销权限)

数据类型

表操作

- 创建表
create table test3
    (tid number,
     tname varchar2(20),
     hiredate date default sysdate);

- 创建表

 create table emp20
 as
 select * from emp where deptno=20

 create table empinfo
  as
  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
  from emp e,dept d
  where e.deptno=d.deptno;

- 增加photo列
alter table test1 add photo blob;

- 修改列
alter table test1 modify name varchar2(40);

- 删除列
alter table test1 drop column photo;

- 修改列
alter table test1 rename column name to username;

- 改表名称
rename test1 to test2;

索引

  • 适合建立索引
  • 不是建立索引
  • oracle中的索引

梦想还是要有的,万一实现了呢