暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle知识总结

陌淮缘 2017-09-22
299

一、Oracle基础入门

          数据库管理系统软件

          网络数据库管理系统:

  (RDBMS:关系型数据库管理系统:以表为单位来存储数据)

     MySQL,SQLServer,Oracle

     DB2,Informix,Sybase.......

 管理,操作数据库中的数据都是通过sql(结构化查询语言)来实现的

   Oracle使用(如何进Oracle11g里面的数据库)

   Oracle11g:是一个Oracle数据库系统(Oracle数据库服务器)


  1.在Oracle11g的系统下可以创建多个数据库

  2.在安装Oracle11g的时候会自动创建一个数据库(orcl)

        (如果在Oracle11g中有数据库那么需要使用相对的帐户/密码才能

        进入数据库)

      sys,system--->manager

      oracle11g安装完成后会存在一些内置的帐户;

       内置的帐户: 1.普通用户:scott--->tiger

                          2.管理员:sys,system

      当然我们也可以创建用户

 3.安装好后就会存在orcl数据库,如何进入到orcl数据库

     -->需提供orcl的帐户和密码

        在什么地方输入帐户和密码??

         --->在数据库终端(数据库客户端工具中输入)

       哪些是数据库客户端工具?

            --->系统自带的客户端工具(sqlplus.exe)

            --->第三方的客户端工具

           (PL/SQLDeveloper,自已写的程序)

   注意:

           在使用oracle数据库客户端工具进入数据库之前 需要启动数据库服务及监听器(监听程序)

        1>启动服务

          services.msc->进入操作系统的服务面板

            -->启动对应的oracle数据库服务(

                在oracle中每创建一个数据库就会生成一个对应的服务;

                数据库的服务名称:oracleservice+数据库名称        )

          net start|stop oracleserviceservice

       2>启动监听器

              lsnrctl start|stop

二.Oracle数据库的结构

    1>逻辑结构

          数据库-->表空间-->数据段-->数据区间-->数据块

    2>物理结构

       数据文件(dbf):存储数据的

       日志文件(log):记录数据库操作的日志信息

       控制文件(ctl):记录物理文件的信息(位置,大小,创建时间)

三.如何创建自定义的用户(要使用管理员来创建)

   1>创建用户

      create user 用户名 identified by 密码

      [default tablespace 表空间的名称]

     分析:1>创建用户时,用户使用的表空间应存在,如果不存在则要先创建

            表空间;

            2>表空间也有内置的,也可以创建表空间

            3>如果创建用户时没有指定表空间,那么该用户默认使用user表空间

         eg:  

               javasmart/manager--->newtablespace(c:/.../javasmart.dbf)

       如果用javasmart进入orcl数据库后所存储的数据在javasmart.dbf中

       当新建一个新用户后,当前这个新用户还不能连接数据库;还需要管理员授权后方可连接数据库

          grant connect to 新用户;

          当然授权后也可以撤消权限

          revoke connect from 用户

    sqlplus / as sysdba

  2>更改用户的表空间及密码

     alter user 用户名 identified by 密码 

     [default tablespace 表空间的名称]

  3>删除用户

       drop user 用户名 [cascade]

      分析:如果加上cascade表示级联删除;

  4>用户锁定与解锁

    锁定:alter user 用户名 account lock;

    解锁:alter user 用户名 account unlock;

  5>创建表空间

   create tablespace 表空间的名称 datafile 数据文件 size 大小(M)

  6>删除表空间

    drop tablespace 表空间名称 [including datfiles and contents]

  7>修改表空间

     alter tablespace 表空间名称 datafile 数据文件 size 大小(m)

  8.>数据库的删除

     universal installer

  9.>新建数据库

    dbca | DataBase Configuration Assiant

  第二章(cksoft-->ckedu(c:\app\orcl\oradata\ckedu.dbf)

   数据库对象:数据库中数据的集合

        对象的类型:表,视图,过程,索引,序列,同义词 ..............

        数据库中表是基本的对象

一.sql语句的分类


   1.DDL(数据定义语言)

       作用:创建,修改,删除数据库中的对象

       create/alter/drop/truncate table

   2.DML(数据操纵语言)->对表的数据进行操作

       select/update/delete/insert

   3.DCL(数据控制语言)-->对用户进行授权与权限回收操作的

       grant..to/revoke..from

        数据库的权限:1>系统权限  2.对象权限

   4.TCL(事务控制语言)

       commit/rollback

          commit:提交事务

             (将缓冲区的数据写入数据文件中)

          rollback:撤消(回滚)事务(撤消之前的操作;

          commit后的操作是不能撤消的;

          DDL语句是无法撤消的;   

   要想数据文件中存放数据,需要在文件中创建表

     create table 表名(每个字段命名及确定每个字段的类型)

     在创建表时,表的设计如何做到合理?在表设计时应遵循三大范式;

     第一范式(1NF)

          要求表的每个字段是不可再分的

     第二范式(2NF)

          要求表中的每一行数据需要提供一个惟一的标识;

          因此表设计时需要设计一个数据不能重复的字段;

          这个字段称之为"主键字段"

     第三范式(3NF)--->消除传递依赖

          一个表在引用另外一个表的主键字段后,不能将另外一个表的   

         非主键字段设计到该表中

    Oracle的数据类型:

      字符型: char(),varchar2(),

      数值型: number

      日期型: date(),timestamp

     大对象型: cblob(大型文本数据),blob(二进制数据:图片,视频,音频)

    


   表结构的操作

     查看表结构 : desc 表名

    1>添加字段

       alter table 表名 add 字段名 类型;

    2>修改字段的名称

       alter table 表名 rename column 字段 to 新的字段名称

    3>修改字段的类型

       alter table 表名 modify 字段 新的数据类型

    4>删除字段

       alter table 表名 drop column 字段

    5>更改表名称

       rename 表名 to 新表名

    6>删除表

       drop table 表名

    向表中添加数据 insert

     insert into 表名[(字段名,字段名)] values(提供各个字段的数据)

   查看表中的数据  select

      select * from 表名 [where|order by|group by]

      模糊查找: select ..from 表名 where 字段 like ...

    修改数据          update

      update 表名 set 字段=值,字段=值,,.... [where ]

    删除数据:         delete

      delete from 表名 [where];

     (where可以用在select,update,delete语句中,其功能是

      用于筛选,where后面需要指定筛选的条件,筛选的条件可以

      有多个)

      删除表中的所有数据: 

        1>delete from 表名

        2>truncate table 表名;

        3>drop table 表名

       三种方式的区别:

        1>delete是DML,truncate table是DDL

        2>delete删除后可回滚;truncate table不可以回滚

        3>delete删除数据后,并不释放数据的存储空间;

          truncate table删除数据后,会释放数据的存储空间;

          如果要删除表中的所有数据truncate table的性能及效率高

          于delete.

        4>drop是删除表 所以对应的会删除表中所有的数据

    DML执行增删改后需执行commit操作

第二章

   约束

   函数

   子查询,

   连接查询

   伪列(rownum,rowid)

 1.约束

    主键:(某一个字段的值不能重复)

       1>建立表时在主键字段的类型后加:primary key

       2>通过修改表结构来创建主键约束

    惟一:(不能重复;主键其实就是惟一约束)

   check约束:(eg:年龄0-120)

    alter table stuinfo add constraint checkage check (age>0 and     age<=120);

    alter table stuinfo add constraint checksex check     (sex='男' or sex='女');

    外键:(如果一个表中的字段引用另外一个表的主键,该字段称为外键

          1.外键的数据类型与主键类型一致

          2.外键字段的值在主键中出现过        )

    alter table 表名  add constraint 约束名 约束条件;

 2.函数:

       聚合:sum,max,min,avg,count

          (聚合函数不能做为where条件及条件的值)

       日期:sysdate()

       字符:instr(), substr()

       转换: to_char,to_number,to_date,nvl() , decode(字段,值1,结果1,[值2,结果2]..,default);

       数学:

       其他:

    补充:(分组,分组后的筛选,in,exists)

 3.子查询:(一个dml语句中又包含查询语句)

      子查询可以出现在where后,或者是from后面

 4.连接查询(多表查询)

      同时从多个表中查询

       select * from dept,emp

     1>内连接(等值连接)

     2>左外连接:左边的表是主表;会显示主表中的所有记录和

                从表中符合连接条件的记录

     3>右外连接:右边的表是主表;会显示主表中的所有记录和

                从表中符合连接条件的记录

  5.rownum,rowid(伪列)

         13   4    1: 1-4  2:5-8

         rownum:行号,rownum是从1开始的,依次递增

         作用:实现数据的分页

         select * from (select rownum rn,emp.* from emp where 

                       rownum<=当前页*每页的记录数) e

                       where e.rn>(当前页-1)*每页的记录数

         rowid:表中每行记录的存储地址,rowid不可能重复的

         作用: 可以删除重复的数据

            delete Test where rowid not in(select min(rowid) from Test group by id)     delete Test ts where rowid not in (select min(rowid) from Test where ts.id=id and ts.name=name )

第三章 数据库对象  同义词,序列,索引,视图

      1.同义词

             在oracle中数据库中的表以用户为单元组织管管理,也就是说默认情况下,一个用户无法访问另外一个用户创建            的表;如果需访问,需指定表的所属者; 管理员所属的对象默认是不向普通用户开放的

         概念:就是给用户所属的对象起一个别名

         语义:create [public] synonym 同义词名称 for 用户名.对象名

                drop [public] synonym 同义词名称

      2.序列

          产生一系列数据

          语法:create sequence 序列名称

             [start with n]:指定序列的起始值

             [increment by n]:指定序列每次增长的值

             [minvalue n]:设置序列循环时的起始值

             [maxvalue n]:指定序列的最大值

             [cycle]:设置序列可以循环

             [cache n]:设置缓存的数据大小(默认是20)

             创建序列时如果没有指定任何参数,序列是从1开始,

             每次增长1,没有最大值的限制

             minvalue:用于设置序列循环的初始值,

             如没有指定循环从1开始;minvalue的值不能大于

             start with的值

           1>序列的两个属性

              currval:获取序列的当前值

               (序列在首次使用时,不能使用currval属性,因为序列还未初始化;因此首次需通过nextval属性让序列初始化)

              nextval:获取序列产生的下一个数据

       3.索引

            建立索引的作用:可以提高查询数据的速度,提升性能

            原理: 为什么建立索引可以提高查询速度?

                 如果没有建立索引的情况下,会进行全表扫描,假设一张表有1000w

                一旦建立索引后,就会生成一个索引页的存储结构,在数据库索引页的结构是树的结构

           使用场景:

                1>表的数据量比较大(1w)

                2>通常对经常用做查询条件的字段建立索引

                3>索引字段不是越多越好

          使用索引应注意的问题

              1>索引字段不是越多越好

              2>如果一个增删改操作多,查询操作少,这样的表最好不要建索引

              3>索引会减缓表的增删改的速度

              4>建立索引后,索引不一定会生效

                   1>使用!= ,like

                   2>使用or时,前后条件字段都建立索引,索引生效

                   3>避免在索引字段进行计算

                   4>对于组合索引,同时查询通常会生效,如果不同时查询使用索引左边

                         的字段查询此时索引会生效

                  5>如果一个字段有大量的重复数据,针该字段建立索引没有太大的意义

         如何建立索引:

               索引字段并非越多越好,对于经常用做查询条件的字段

               对于有大量重复数据的字段,创建索引是不合理的

         建立索引

            语法:

                create index empnameIndex on 表名(字段名)

         索引的分类:

                普通索引:create index 索引名称 on 表名(字段名)

                位图索引:create bitmap index 索引名称 on 表名(字段名)

                 惟一索引:create unique index 索引名称 on 表名(字段名)

                      主键就是一个特殊的惟一索引

                 组合索引:create index 索引名称 on 表名(字段1,字段2)

                     场景:如果经常使用多个字段同时查询

                基于函数的索引:create index 索引名称 on 表名  函数

          索引的不足:

                 减缓了数据的增,删,改的效率

       4.视图

           作用:通过视图可以简化数据查询操作

           语法: create view 视图名 as select ..........

           注意:视图对象并不存储数据; 通过查询视图得到的数据,仍然是从表中查询出来的

           数据字典表:通过数据字典表可以查询数据库中各种对象的信息

             user_

                  表示当前用户自已创建的该数据库对象

             all_

                  表示当前用户自已创建的该数据库对象和有权限使用的数据库对象

             dba_ (只有管理员才有权限)

                  所有的该数据库对象

             user_tables,user_synonyms,user_views,

             user_sequences,user_indexes

             user_tablespaces

             user_objects:存储数据中所能的数据库对象信息

 第四章   PL/SQL程序设计

   引言:使用PL/SQL其目的是为了解决复杂的数据操作;因为PL/SQL可以

        将多条sql语句做为一个整体来执行,同时在执行这些语句的过程中

        可以加入控制结构

   如何使用PL/SQL??

      PLSQL三部分组成:

        [1.定义部分]  

        2.执行部分  

         (执行部分可以的内容有 :  

           1>.控制结构,变量的赋值

           2>.sql语句:

               默认只能执行insert,update,delete,select into

               以及TCL;如果想在pl/sql执行部分执行DDL,DCL,select查询

               应该将DDL,DCL,select查询当做动态sql来执行.

              执行动态sql语句:

               execute immediate '要执行的语句';

         [3.异常处理部分]

   如何使用变量

      声明:   变量名  数据类型;

      赋值:    1>变量名:=值;

                 2>通过select into 变量 

                 (select into赋值时,select查询的结果应是单行的)

      (数据类型:%type,%rowtype,cursor(游标)  

        %type: 声明变量时,让该变量和表的字段类型保持一致

        %rowtype:该变量用于存储表中的一行数据

        cursor:是一个查询结果集;如果需要使用一个变量存储结果集的数据

        可以声明一个游标类型的变量

           游标使用:

             1>声明游标 declare cursor 变量 is select......

             2>打开游标 open 游标变量

             3>循环从游标中取数据   fetch 游标变量 into 中间变量

             4>关闭游标                   close 游标变量

           循环游标:如果按照上述的步骤使用游标有点麻烦;使用循环游标可以简化步骤

   控制结构:

     条件:if ..case    when .....end case

     循环:

          1>基本循环  loop ....end loop

          2>while循环 while loop ....... end loop;

          3>for循环   for loop ......... end loop;

第五章:  子程序与程序包

   命名块:  有名称的PL/SQL代码块;将会以对象的形式存在数据库中;

            在oracle中命名块有子程序和程序包这两种

            子程序分为两种:1>过程(存储过程)  2.函数

    1.过程

       语法:

       过程的参数可以有多个,其参数的模式可以是三种之一:

       in  :表示该参数是输入参数;默认是in

       out :表示该参数是输出参数

       in out:表示该参数即可以是输入参数也可以是输出参数

       执行:

        1>excute|exec     过程名;

        2>匿名块

    2.函数

        语法:创建自定义的函数,必须指定该函数的返回类型

      调用

        1>select 语句中

        2>匿名块

    3.程序包:

       管理子程序的对象,也就是说一个包中可以有若干个子程序

       一个程序包由两部分组成:1>包规范  2>包体

       因此在创建程序包时应分别创建包规范和包体

       包规范:指程序包有那些子程序

       包体:是包规范中的子程序的实现

       调用:和上面一样,只是要在调用加上包名

       程序包分为:内置包和自定义的包。

4.数据迁移

    3-1>数据导出

       exp 用户名/密码  file=**.dmp owner=用户名

    3-2>数据导入

       imp 用户名/密码  file=***.dmp full=y

5.调优

    分析sql语句的执行计划

       1.sqlplus 中

           set autotrace on

           set timing on

       2.pl/sql developer

           F5

  6.Oracle和MySQL的区别

       6.1.Oracle是大型数据库而Mysql是中小型数据库

      6.2. Oracle支持大并发,大访问量,是OLTP最好的工具。
      6.3. 安装所用的空间差别也是很大的,Mysql占用空间较小,Oracle占用空间较大,且使用            的时候Oracle占用特别大的内存空间和其他机器性能。

       6.4Oracle和MySQL一些操作上的区别

            1.自动增长的数据类型处理

            2.单引号的处理

            3.分页的sql语句处理

            4.长字符串的处理

            5.日期字段的处理

            6.空字符的处理

            7.字符串的模糊比较

 7.MySQL vs Oracle操作上的区别

   1.支持字段上使用auto_increment

   2.支持批量添加

   3>没有提供rowid,rownum

   4>使用limit关键字完成分页

     select * from dept limit 0,2

      0:起始行的索引

      2:每页显示的数量








文章转载自陌淮缘,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论