首页 > 代码库 > Oracle数据库04

Oracle数据库04

一、用户user

  1、创建用户

    CREATE USER QIGX IDENTIFIED BY TIGER;

    这里的QIGX是账号,TIGER是密码。

  2、分配权限

    GRANT CONNECT,RESOURCE,DBA TO QIGX;

    CONNECT:临时用户;RESOURCE:更为可靠和正式的用户;DBA:数据库管理角色,拥有管理数据库的最高权限。

  3、取消权限

    REVOKE DBA FROM QIGX;

 


 

二、数据库表table

  


 

三、序列sequence

  序列是Oracle专有的对象,它用来产生一个自动递增的数列

  创建序列:

    CREATE SEQUENCE SEQ_NAME

    INCREMENT BY N

    START WITH N

    MAXVALUE N|NOMAXVAKUE 10^27 OR -1

    MINVALUE N|NOMINVALUE

    CYCLE|NOCYCLE

    CACHE|NOCACHE

  示例:

    创建序列:

      CREATESEQUENCE SEQ_EMPCOPY_ID START WITH 1 INCREMENT BY 1;

    使用序列:

      SELECT SEQ_EMPCOPY_ID.NEXTVAL FROM DUAL INSERT INTO EMPCOPY(EMPNO,ENMANE) VALUES(SEQ_EMPCOPY_ID.NEXT,‘TEST‘);

     查看序列状态:

      SELECT SEQ_EMPCOPY_ID.CURRVAL FROM DUAL;

    删除序列:

      DROP SEQUENCE SEQ_EMPCOPY_ID;


 四、索引index

  索引类似字典和书的目录,是为了加快对数据的搜索速度而设立的。索引有自己专门的存储空间,与表独立存放。

  索引类型默认采用B树数据结构,数据全部集中在叶子节点。

  技术分享

  在数据库中用来加速对表的查询,通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O。

  索引创建后,在用户撤销它之前并不会用到该索引的名字,但是索引在用户查询时会自动起作用。

  索引创建的两种情况:

    自动:当在表上定义一个PRIMARY KEY或者UNIQUE约束条件时,Oracle数据库自动创建一个对应的唯一索引。

    手动:用户可以创建索引以加速查询。

  创建索引:

    CREATE INDEX INDEX_STU_SANME ON T_STUDENT(SNAME);

  删除索引:

    DROP INDEX INDEX_STU_SNAME;

 


 

 五、视图view

  定义:

    视图是从若干基本表和(或)其他视图构造出来的表。

    在创建一个视图时,只是存放的视图的定义,也即是动态检索数据查询语句,而并不存放视图对应的数据。

    在用户使用视图时才去求相对应的数据。(视图也被称为"虚表")

  作用:

    可以限制对数据的访问,可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。

    可以使复杂的查询变得简单。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。

    提供了相同数据的不同显示。

  创建视图

    CREATE OR REPLACE VIEW VIEW_STU AS(SELECT SNO,SNAME,GENDER FROM T_STUDENT);

    VIEW_STU是视图名

  查询视图

    SELECT * FROM VIEW_STU;

  删除视图

    DROP VIEW VIEW_STU;

 


 

六、其他

  1、事务

    事务(Transaction)是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位。

    事务是为了保证数据库的完整性。

    在Oracle中,事务没有开始的语句。一个事务起始于一条DML(Insert、Update和Delete)语句,结束语以下的几种情况:

      用户显示执行Commit语句提交操作或Rollback语句回退。

      当执行DDL(Create、Alter和Drop)语句事务自动提交。

      用户正常断开连接时,事务自动提交。

      系统崩溃或断电时事务自动回退。

    Commit表示事务成功地结束,此时告诉系统,数据库要进入一个新的正确状态,该事务对数据库的所有更新都以交付实施。每个Commit语句都可以看成是一个事务成功的结束,同时也是另一个事务的开始。

    Rollback表示事务不成功的结束,此时告诉系统,已发生错误,数据库可能处在不正确的状态,该事务对数据库的更新必须被撤销,数据库应恢复该事务到初始状态。每个Rollback语句同时也是另一个事务的开始。

    一旦执行了commit语句,将目前对数据库的操作提交给数据库,以后就不能用rollback进行撤销。

    执行一个DDL、DCL语句或从SQL*Plus正常退出,都会自动执行commit命令。

    提交或回滚前数据的状态:

      以前的数据可恢复。

      当前的用户可以看到DML操作的结果。

      其他的用户不能看到DML操作的结果。

      被操作的数据被锁住,其他用户不能修改这些数据。

    提交后数据的状态:

      数据的修改被永久写在数据库中。

      数据以前的状态永久性丢失。

      所有的用户都能看到操作后的结果。

      记录锁被释放,其他用户可操作这些记录。

    回滚后数据的状态:

      语句将放弃所有的数据修改

        修改的数据被退回

        恢复数据到以前的状态

        行级锁被释放

   

  2、rowid和rownum

    rowid在记录创建时生成,而且是不变的,直接指向硬件上的存储位置。

    用rowid直接访问时最快的,但也是人力无法做到的。

    只要记录没被搬动过,rowid是不变的。

    rownum是个伪列,查询的时候除非特别指定,否则不会显示。

    其主要的用用处是控制查询返回的行数

    只能使用:<,<=

    当rownum和order by一起使用时,会首先选出符合rownum条件的记录,然后在进行排序,这会给我们的查询带来难度。

    示例:

      SELECT ROWID,ROWNUM,EMP.*FROM EMP;

      技术分享

 

      SELECT ROWID,ROWNUM,EMP.* FROM EMP ORDER BY SAL;

      技术分享

      SELECT ROWID,ROWNUM,EMP.* FROM WHERE ROWNUM <= 5;  

      技术分享

  3、分页

    显示EMP表中薪水最高的钱五个雇员信息

      步骤1:显示按照工资排序的所有员工

        SELECT * FROM EMP ORDER BY SAL DESC;

      步骤2:把步骤1结果看做一张表,查询该表的前5条数据

        SELECT ROWNUM,T.* FROM (SELECT * FROM EMP ORDER BY SAL DESC) T WHERE ROWNUM <= 5;

  4、导入和导出

     使用exp导入和导出数据

    使用PL/SQL Developer 导入和导出数据

 

Oracle数据库04