Oracle学习笔记

一、卸载Oracle步骤(如果卸不好就不能安新版本)
------------------------------
  1、停止所有Oracle服务
  2、运行Oracle Universal Installer卸载Oracle
  3、修改注册表、删除Oracle相关信息
     + Oracle软件有关键值
         HKEY_LOCAL_MACHINE\SOFTWARE\Oracle

     + Oracle服务
         HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 目录下的Oracle相关信息

     + Oracle 事件日志    

      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application 目录下的Oracle相关信息

  4、删除Oracle系统目录 (eg:c:\program files\oracle)
  5、删除Oracle环境变量
  6、删除程序菜单项中的Oracle菜单
  7、(重启系统后)删除Oracle工作主目录(D:\Oracle)

 

二、SQL语句分类
------------------------------
  1、Select查询语句
  2、DML语句(数据操作语言----Data Manipuoation language)
          Insert、Update、Delete、Merge(表合并)
  3、DDL语句(数据定义语言)
          Crete、Alter、Drop、Truncate(截断)
  4、DCL语句(数据控制语言)
          Grant、Revoke
  5、事务控制语句
          Commit、Rollback、Savepoint


三、基础语法
------------------------------
  1、连接字符串 ----------------- ||
  2、字段别名 ----------------- as (如果别名中有空格或大小写,别名要加双引号)
  3、空值  不是0也不是空格
  4、去除重复行 distinct
  5、排序  order by
  6、条件查询 where
  7、比较运算符 <,>...
  8、模糊查询 Like(_ 一个字符,% 多个字符)
  9、空值判断 is null
  10、逻辑运算符 NOT,AND,OR
  11、oracle不区分大小写,但字符串中的区分大小写
     12、case表达式:
     语法:
           case  exp  when   compare_exp1  then  return_exp1 
                   [when   compare_exp2  then  return_exp2
                    when   compare_expn then  return_expn
                  else  else_exp]
     eg:
           select empno,ename,sal,
          case  deptno   when  10 then  '财务部'
                        when  20  then  '研发部'
                        when  30  then  '销售部'
                        else  '未知部门'
          end   部门
            from  emp;
  13、DECODE()函数
          ---和case表达式类似,decode()函数也用于实现多路分支结构
          语法:
       decode(col_name,search1,result1
                         [,search2,result2...]
                         [,default]
                   )
           eg:
       select  empno,ename,sal,
            decode(deptno,10,'财务部',
                           20,'研发部',
                           30,'销售部',
                          '未知部门')
            部门
       from emp;
四、函数
------------------------------

函数嵌套
       单行函数可以嵌套使用,嵌套层次无限制
       嵌套函数的执行顺序是由内到外

分类:
       单行函数
       多行函数
 分组函数最多可以嵌套两层


五、连接与子查询
------------------------------
   1、如果子查询没有返回结果,主查询也不会返回任何结果
   2、如果子查询返回单行结果,则为单行子查询,可以在主查询中对其使用相应的单行记录比较运算符
   3、如果子查询返回多行结果,则为多行子查询,此时不允许对其使用单行记录比较运算符,只能用IN,ANY,ALL

  4、TopN查询:
     在ORACLE中通常采子查询的方式来实现TopN查询
  语法格式:
    SELECT 字段列表
    FROM  (SELECT 字段列表 FROMtable ORDER BY 排序字段)
    WHERE rownum <= n

 

六、DML与事务控制
----------------------------------------
  1、Insert语句:
       -----可以在insert语句中使用子查询,实现表间数据拷贝:
         INSERT INTO dept1(id,name)  SELECT deptno,dname  FROM dept

  2、Merge语句:
       ---该语句用于进行数据合并,根据条件在表中执行数据的修改或插入操作,如果要插入的记录在目标表中已经存在,则执行更新操作、否则执行插入操作。

       ---语法:
     MERGE INTO  tablename [alias]
     USING  (table | view | sub_query) [alias]
     ON (join_condition)
     WHEN  matched THEN
      UPDATE SET col1 = col1_val,col2=col2_val
     WHEN not  matched THEN
      INSERT (column_list) VALUES (column_val)
  3、事务控制:
       1、组成单个逻辑工作单元的一系列操作被称为事务。
       2、数据库事务组成:
           ---0~多条DML语句
           ---1条DDL(Data Define Language)语句
           ---1条DCL(Data Control Language)语句
      4、事务特性(ACID):

       原子性(Atornicity)
              一致性(Consistency)
              隔离性(Isolation)
              持久性(Durability)
      5、事务的开始和结束
        事务开始于第一条可执行语句
        事务结束:
            遇到commit 或rollback语句
            遇到DDL 或DCL语句
            用户会话结束
            系统崩溃
        事务的提交和回滚
           显式的提交和回滚操作是为了更好的保证数据的一致性
           下述情况下事务会被自动提交:

       执行一个DDL语句
       执行一个DCL语句
       正常结束会话
       会话异常终止/系统崩溃时事务被自动回滚
       6、提交/回滚前数据状态
        当前事务中数据状态的改变是可以恢复的
        当前事务中的DML操作结果只对当前用户(会话)可见,其它用户(会话)看不到当前事务中数据状态的改变,直到当前事务结束。
        当前事务中DML语句所涉及到的行被锁定,其它用户(会话)不能对其进行修改操作。
       7、事务提交后数据状态
        数据的修改永久生效,不可再撤消
        数据以前的状态永久丢失,无法恢复
        所有的用户(会话)都将看到操作后的结果
        记录锁被释放,其它用户可对这些进行修改操作
        事务中的保存点(savepoints)被清除
       8、事务回滚后数据状态
        数据的修改被撤消
        数据恢复到修改前的状态
      记录锁被释放
       9、保存点
    ---通过保存点在当前的事务中创建标记,将来可回退到指定的标记(保存点)处,实现事务的部分回滚。
    ---用法举例
       insert into dept values (22,'adf','BeiJing');
       insert into dept values (23,'fda','Shanghai');
       savepoint p1;
       insert into dept values (24,'gdf','Tianjing');
       ---
       select * from dept;
       rollback to p1;
       select * from dept;

 

七、DDL与数据库对象
----------------------------------------------
  1、常用数据库对象:
       表,约束条件,视图,索引,序列,同义词
  2、可以使用子查询创建一个表
   语法:
     create table tablename(col1,col2...) as subquery;
  3、修改表结构----使用alter table语句:
                添加字段 alter table tablename  add(column datatype [default expr])
         修改字段  alter table tablename modify(column datatype [default expr]),不能修改字段名,只可以修改类型,精度
       删除字段  alter table tablename drop(column)
  4、清空表中数据-----truncate table tablename(DDL语句),表结构还在
     清除表中所有记录
     释放表的存储空间
  5、删除表-----Drop(DDL语句)
     表中所有数据被删除
     此前未完成的事务将被提交
     所有相关的索引被删除
  6、重命名表-----rename(DDL语句)
     也可以修改其它数据库对象(视图,序列。。。)的名称
     执行重命名操作的必须是对象的所有者
   eg:
      rename  old_name  to new_name
  7、Oracle数据库中的表
     1、用户定义的表
     2、数据字典表(表或视图,只读)
  8、约束
     1、not null(非空),只能在字段级别定义
      eg:create table student(
                sid number(3) not null,--系统自动命名,以SYS_cn开头         
                name varchar2(20),
                birth date constraint student_birth_nn(约束名) not null   --自定义约束名
            );
     2、unique (唯一性约束)
     eg:create table student(
        sid number(3) unique, --字段级别
        name varchar(20)
             );
     or
            create table student(
        sid number(3) ,
        name varchar(20)
        constraint student_sid_un unique(sid) --表级
             );
     3、primary key(主键)
      eg:create table student(
         sid number(3) primary key --字段级别
       name varchar(20)
           );
    or
         create table student(
      sid number(3) ,
      name varchar(20)
      constraint student_sid_pk primary key(sid)     --表级
           );
     4、foreigh key(外键)
     eg:create table student(
        sid number(3)  references  tablename(id) - 字段级
        name varchar(20)
             );
     or
            create table student(
        sid number(3) ,
        name varchar(20)
        constraint student_sid_pk foreign key(sid) references tablename(id)     --表级
             );
  
    5、check  (检查),只能在字段级别定义
  9、建表后添加约束语法
     alter table tablename add con_name primary key(id) | check ...
     注:非空约束必须使用modify子句添加
     eg:alter table tablename modify (name  not null)
  10、删除约束语法:
     alter table tablename drop constraint con_name;
           删除主键的另一种方式:
     alter table tablen 时,如果还存在与该约束相关联的其它约束,则删除操作会失败,此时可使用cascade子句将其它关联的约束一并删除。
   语法:
       alter table tablename drop constraint con_name [cascade]
  11、在删除表中字段时,如果该字段处于多字段联合约束条件(联合主键,联合唯一键,存在参照当前字段的外键)中,则删除失败,此时可使用 cascade constraints子句将与该字段相关的约束一并删除。
     语法:
        alter table tablename drop [column [...column]]  cascade constraints;
     create table student(
      student_id number(5),
      subject_id  varchar(20),
      record number(3),
      constraint  record_stuID_subId_pk primary key(student_id,subject_id)  
    );
   删除student_id:
       alter table student drop student_id cascade constraints;

  12、禁用约束:
        1、在alter table语句中,还可以使用disable constraints子句禁用已有约束
        2、也可以使用cascade选项将相关联的约束也一并禁用
  语法:
        alter table tablename disable constraint constraint_name [cascade]
  启用约束语法:
        alter table tablename cnable consrraint constraint_name;

  13、视图:
     1、创建视图语法:
     create [or replace] view  view_name [col_name1,col_name2...] as subquery;
     2、删除视图语法:
     drop view view_name;
     3、强制创建视图:
     可使用force选项强制创建视图,不管表是否存在,默认为noforce。
     create [or replace]  [force] [noforce] view view_name as subquery;

     create or replace force view view_name as select * from tab_name; --假定tab_name现在不存在
     4、更新视图:
     1、在可更新的社图上进行DML操作,可以修改其基表中数据:
         可更新视图的定义中不能使用分组函数、group by子句、distinct关键字、rownum伪列,字段的定义不能为表达式。。。
         由两个经上基表中导出的视图不可更新
       基表中非空的列在视图定义中未包括,则不可在视图上进行insert操作。。。
     2、在视图上进行DML操作,语法与在表上操作相同
       3、创建只读视图语法:其不允许任何修改
       create or replace [force] [noforce] view view_name 

       as subquery
       [with read only];
                  eg:
         create or replace force view myview
         as select * from tab_name
         with read only;

  14、索引
      1、什么是索引(Index)?
       --一种用于提高查询效率的数据库对象
       --通过快速定位数据的方法,减少磁盘I/O操作;
       --索引信息与表独立存入;
       --Oracle数据库自动使用和维护索引;
      2、分类
       唯一索引
       非唯一索引
      3、创建索引的两种方式
       自动创建:在定义主键或唯一键约束时系统会自动在相应的字段上创建唯一性索引
       手动创建:用户可以在其它列上创建非唯一的索引,以加速查询
          语法:
           create index idx_name on table_name(column_name)
          eg: create index myindex on test(ename)
      4、删除索引:
       drop index  index_name
        5、基于函数的索引
       基于表达式的索引被统称为基于函数的索引——索引表达式由表中的字段、常量、SQL函数和自定义函数构建而成。
     语法:
      create index index_name on table (function(column));
   eg:
      create index myindex on table_name(lower(ename));
    使用索引函数:
      select * from emp where lower(ename) = 'king';
  15、序列
       1、什么是序列(sequence)
       --系统自动生成的、不重复的整数值
       --序列是一种数据库对象,可以被多个用户共享
       --典型用途是做为主键值,它对于每一行必须是唯一的
       --序列可以代替应用程序编号
       --可以对序列值进行缓冲存储,以提高访问效率
        2、创建序列:
       create sequence seq_name
       [increment by n]
       [start with n]
       [{maxvalue n | nomaxvalue }]
       [{mmvalue n | nommvalue}]
       [{cycle | nocycle}]
       [{cache n | nocache}]
       [{order | noorder}]
 
   eg:
      create sequence mysequence 1
      increment by 1
      start with 1
      nomaxvalue nocycle;
   等价于如下:
      create sqeuence mysequence2;
       3、使用序列:
     nextval/currval伪列
           nextval伪列用于从指定的序列数值中取出下一个值
           currval伪列引用的是指定序列的“当前值”
   语法格式:
           select mysequence1.currval from dual;
           select mysequence1.nextval from dual;
           insert into test1 values(mysequence1.nextval,'Tom')
   说明:
         使用缓存(cache n)可提高访问效率
         序列在下列情况下可能出现不连续的情况:
        回滚
        系统异常
        多个表同时使用同一序列
         使用nocache和noorder设置会降低运行效率
         4、修改序列:
       alter sequence seq_name
       [increment by n]
       [{maxvalue n | nomaxvalue }]
       [{mmvalue n | nommvalue}]
       [{cycle | nocycle}]
       [{cache n | nocache}]
       [{order | noorder}]
        5、删除序列:
       drop sequence seq_name

  15、同义词——给现有的数据库对象起个别名
         1、同义词相当于对象的别名,使用同义词可以:
       方便访问其它用户的对象
       缩短对象名字的长度
         2、创建同义词
       create  [public]   synonym   syn_name  for object
     eg:
          create synonym gt1 for emp;
         3、使用同义词
       select * from gt1;
         4、删除同义词
       drop synonym gt1;
    
 

posted @ 2010-07-15 12:17  贺满  阅读(818)  评论(0编辑  收藏  举报