zoukankan      html  css  js  c++  java
  • oracle事物和常用数据库对象笔记和实验

    一:事物
    1:什么是事物
    是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败

    2:事物的特性
    原子性、一致性、隔离性、持久性

    3:事物的控制
    使用COMMIT和ROLLBACK实现事务控制
        COMMIT:提交事务,即把事务中对数据库的修改进行永久保存
        ROLLBACK:回滚事务,即取消对数据库所做的任何修改

    使用AUTOCOMMIT实现事务的自动提交
        设置AUTOCOMMIT为ON

    二:索引
    1:索引的含义
    索引是oracel的一个对象,是与表关联的可选结构,提供了一种快速访问数据的途径,提高了数据库检索性能

    2:索引的特性
    提高查询速度
    可以对表的一列或多列建立索引
    建立索引的数量没有限制
    索引需要磁盘存储
    索引的引用由oracle决定

    3:索引的分类
    B树索引
    唯一索引和非唯一索引
    反向键索引
    位图索引
    组合索引
    基于函数的索引

    三:视图
    1:视图的含义
    视图:视图是一个虚表,不占用物理空间,视图中的数据是从一个或多个实际表中获得的。
    物化视图:物化视图也称为实体化视图,含有数据,占用空间。

    2:视图的作用
    提供了另外一种级别的表安全性
    隐藏的数据的复杂性
    简化的用户的SQL命令
    隔离基表结构的改变
    通过重命名列,从另一个角度提供数据

    四:序列
    1:序列的含义
    序列是用于生成一系列唯一数字的对象,通常用来自动生成主键或唯一键的值。

    2:访问序列
    NEXTVAL 返回序列的下一个值
    CURRVAL 返回序列的当前值

    五:同义词
    1:同义词含义
    同义词是现有对象的一个别名

    2:同义词的好处
    简化SQL语句
    隐藏对象的名称和所有者
    提供对对象的公共访问

    3:同义词的类型
    私有同义词:只能在其模式内访问,且不能与当前模式的对象同名
    公有同义词:可被所有的数据库用户访问

    六:分区表
    1:分区表的含义
    允许用户将一个表分成多个分区,这个分划分过区的表就是oracle的分区表

    2:分区表的特性
    用户可以执行查询,只访问表中的特定分区
    将不同的分区存储在不同的磁盘,提高访问性能和安全性
    可以独立地备份和恢复每个分区

    3:分区表优点
    改善表的查询性能
    表更容易管理
    便于备份和恢复
    提高数据安全性

    4:分区表的条件
    数据量大于2GB
    已有的数据和新添加的数据有明显的界限划分

    实验部分:

    添加c##scott账号,为后续试验做准备

    1:sys身份登录oracle

    2:创建测试账号scott

    SQL> create user c##scott identified by scott default tablespace users temporary tablespace temp quota unlimited on users;

    3:授权

    SQL> grant connect,resource to c##scott;

    4:导入脚本文件(提前将脚本拷贝到/opt的目录下)

    SQL> @/opt/test.sql

    5:切换到c##scott用户

    SQL> conn c##scott/scott

    一:事务

    1:使用commit和rollback实现事务控制

    1):向scott数据库中的dept表插入数据

    SQL> conn c##scott

    SQL> col loc for a10;

    SQL> select * from dept;

        DEPTNO DNAME       LOC

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

    10 ACCOUNTING       NEW YORK

    20 RESEARCH       DALLAS

    30 SALES       CHICAGO

    40 OPERATIONS       BOSTON

    SQL> insert into dept values(50,'a',null);

    SQL> insert into dept values(60,'b',null);

    SQL> commit;

    SQL> select * from dept;

    2):再次插入数据,不提交,执行回滚操作

    SQL> insert into dept values(70,'c',null);

    SQL> select * from dept;

    SQL> rollback;

    SQL> select * from dept;

    2:实现事物的自动提交

    SQL> set autocommit on;       \实现事物自动提交

    SQL> insert into dept values(90,'b',null);

    SQL> rollback;

    SQL> select * from dept;

    二:索引

    1:索引的创建

    SQL> conn c##scott

    (1)创建B树索引

    SQL> create index emp_ename_idx on emp(ename);   \在emp表中,为雇员名称列创建B树索引

    (2)创建唯一索引

    SQL> create unique index emp_grade_unique_idx on salgrade(grade);  \在salgrade表中,为级别编号grade创建唯一索引

    (3)反向键索引

    在emp中,为雇员编号empno创建反向键索引

    SQL> create index emp_deptno_reverse_idx on emp(deptno) reverse;

    (4)位图索引

    SQL> create bitmap index emp_job_bit_idx on emp(job);  \为工种列创建位图索引

    (5)基于函数的索引

    SQL> create index emp_ename_upper_idx on emp(upper(ename));  \为雇员名称创建大写函数索引

    2:查看索引

    (1)查看索引名,索引类型,所属表名,表空间名称

    SQL> SQL> select index_name,index_type,table_name,tablespace_name from user_indexes;

    (2)查看索引名,表名,索引列

    SQL> select index_name,table_name,column_name

    from user_ind_columns

    where index_name like 'EMP%';

    3:维护索引

    1): SQL> alter index emp_job_bit_idx rebuild;  \重建索引

    2): SQL> alter index emp_job_bit_idx coalesce;  \合并索引碎片

    3): SQL> drop index emp_job_bit_idx;  \删除索引

    三:视图

    普通视图

    1:创建视图

    (1)创建表

    [oracle@oracle admin]$ sqlplus sys/aptech as sysdba

    SQL> create table order_master (

    orderno number(5) constraint p_ord primary key,

    odate date,

    vencode number(5),            

    o_status char(1));

    (2)插入数据

    SQL> insert into order_master values (1,to_date('2006-01-01','yyyy-mm-dd'),1,'a');

    SQL> insert into order_master values (2,to_date('2007-01-01','yyyy-mm-dd'),2,'p');

    (3)创建视图

    SQL> create view pen_view as

      select * from order_master

      where o_status ='p';        \该列作为创建视图的条件,不能被修改

    (4)查询视图

    SQL> select * from pen_view;

    2:由于视图创建有缺陷,导致错误的修改后,无法查询视图,可以为视图添加约束,

    (1)通过视图修改数据(错误的修改后,无法查询视图,修改了o_status列的值)

    SQL> update pen_view set o_status='d' where o_status='p';

    SQL> select * from pen_view;

    (2)为了避免修改视图错误,使用with check option创建检查约束

    SQL> create or replace view pen_view as select * from order_master where o_status='p'

    with check option constraint penv;

    (3)插入数据

    SQL> insert into order_master values (3,to_date('2007-01-01','yyyy-mm-dd'),3,'p');   \插入数据

    (4)修改视图,会报错,因为违反检查约束

    SQL> update pen_view set o_status='d' where o_status='p';

    3:使用read only创建只读视图,阻止对视图的修改

    SQL> create or replace view pen_view as select * from order_master with read only;

    4:创建视图时,基表不存在

    (1)创建错误的视图(venmaster表不存在)

    SQL> create force view ven as select * from venmast;

    会报错,提示表不存在,此时可以创建出这个表,如果针对该表执行了sql语句,系统会自动重新编译该视图,也可以手动重新编译此视图

    (2)创建venmast表

    SQL> create table venmast (

    venno number(5) constraint p_ven primary key,

    vendate date,

    vencode number(5),            

    ven_status char(1));

    (3)手动编译视图,

    SQL> alter view ven compile;

    4:创建带有order by字句的视图

    SQL> create or replace view pen_view as select * from order_master order by orderno;

    5:DML语句和复杂视图

    (1)通过数据字典查询视图

    SQL> select view_name from user_views;

    (2)删除视图

    SQL> drop view pen_view;

    物化视图

    1:查看物化视图的查询重写功能是否开启

    SQL> show parameter query_rewrite_enabled;

    2:创建物化视图

    (1)位c##scott账户授权

    SQL> conn system   \先以system的身份链接oracle

    SQL> grant create view to c##scott;   \赋予scott创建视图的权限

    SQL> grant create materialized view to c##scott;   \赋予scott创建物化视图的权限

    SQL> grant query rewrite to c##scott;   \赋予scottquery rewrite的权限

    SQL> grant create any table to c##scott;   \赋予scott创建表的权限

    SQL> grant select any table to c##scott;   \ 赋予scott查询任何表的权限 

    (2)创建物化视图日志

    SQL> conn c##scott   \用scott账户登录

    创建物化视图日志

    SQL> create materialized view log on dept with rowid;

    SQL> create materialized view log on emp with rowid;

    (3)创建物化视图

    SQL> create materialized view mtrlview_test

    build immediate

    refresh fast

    on commit

    enable query rewrite

    as

    select d.dname,d.loc,e.ename,e.job,e.mgr,

    e.hiredate,e.sal,d.rowid d_rowid,e.rowid e_rowid

    from dept d,emp e

    where d.deptno=e.deptno;

    (4)删除物化视图

    SQL> drop materialized view mtrlview_test;

    四:序列

    1:创建序列

    SQL> create sequence toy_seq

      start with 10

      increment by 1

      maxvalue 2000

      nocycle

      cache 30;

    2:序列的使用

    (1)创建表

    SQL> create table toys (

      toyid number not null,

      toyname varchar2(20),

      toyprice number);

    (2)插入数据

    SQL> insert into toys (toyid,toyname,toyprice)

      values (toy_seq.nextval,'twenty',25);

    (3)查看数据

    SQL> col toyname for a10;

    SQL> select * from toys;

    (4)查看序列当前值,和下一个值

    SQL> select toy_seq.currval from dual;

    SQL> select toy_seq.nextval from dual;

    3:更改序列

    SQL> alter sequence toy_seq

      maxvalue 5000

      cycle;

    4:查看序列

    SQL> select sequence_name,increment_by,cache_size

      from user_sequences;

    5:删除序列

    SQL> drop sequence toy_seq;

    五:同义词

    1:在system模式下创建私有同义词访问scott模式下的emp表

    (1)以system身份登陆,并查询scott中emp表

    SQL> conn system

    SQL> select * from c##scott.emp ;

    (2)创建同义词emp

    SQL> create synonym sy_emp for c##scott.emp;

    (3)访问同义词sy_emp

    SQL> select * from sy_emp;

    2:案例:访问网络服务名为orcl的远程数据库中的表T

    (1)system身份登录

    SQL> conn system/aptech@orcl

    (2)下面语句是要创建一个表T,并添加两条记录(书上没有这个过程,表T也就不存在了,所以要创建一个表T)

    SQL> create table T (

       orderno number(5) constraint p_ord primary key,

       odate date,

       vencode number(5),            

       o_status char(1));

    (3)添加数据

    SQL> insert into T values (1,to_date('2006-01-01','yyyy-mm-dd'),1,'a');

    SQL> insert into T values (2,to_date('2007-01-01','yyyy-mm-dd'),2,'p');

    (4)创建数据库链接

    SQL> create database link dblink_sw_orcl connect to system identified by aptech using 'orcl ';

    (5)用刚创建的链接名查询

    SQL> select * from T@dblink_sw_orcl;

    (6)创建私有同义词,orcl为实例名

    SQL> create synonym sy_T for T@orcl;

    (7)用私有同义词查询

    SQL> select * from sy_T;

    3:在scott模式下对部门表dept创建共有同义词public_sy_dept,让其他用户也能使用这个共有同义词

    SQL> conn system

    SQL> create user c##user1 identified by aptech;

    SQL> grant connect,resource to c##user1;

    SQL> grant create public synonym to c##scott;

    SQL> conn c##scott

    SQL> grant select on dept to c##user1;

    SQL> create public synonym public_sy_dept for dept;

    SQL> conn c##user1

    SQL> select * from public_sy_dept;

    4:删除同义词

    SQL> drop synonym system.sy_emp;

    SQL> drop public synonym public_sy_dept;

    六:分区表

    1:以分区的方式建立季度销售信息

    SQL> conn sys as sysdba

    create table sales

    (

    sales_id number,

    product_id varchar2(5),

    sales_date date not null

    )

    partition by range (sales_date)

    (

    partition p1 values less than (to_date('2013-04-1','yyyy-mm-dd')),

    partition p2 values less than (to_date('2013-07-1','yyyy-mm-dd')),

    partition p3 values less than (to_date('2013-10-1','yyyy-mm-dd')),

    partition p4 values less than (to_date('2014-01-1','yyyy-mm-dd')),

    partition p5 values less than (maxvalue)

    );

    2:插入数据

    SQL> alter session set nls_date_format = 'yy-mm-dd';       \设置日期格式

    SQL> INSERT INTO SALES VALUES (1,'P001','2013-02-3');

    3:查看某季度的数据

    SQL> select * from sales partition(p1);

    4:删除某季度的数据(如果表中无数据会提示0 rows deleted.)

    SQL> delete from sales partition(p1);

    5:查看分区情况

    SQL> select * from user_tab_partitions;

  • 相关阅读:
    Oracle ref cursor和sys_refcursor
    一些命令可以帮您了解Linux 操作系统用户信息
    Linux 6上使用UDEV绑定共享存储
    Oracle VirtualBox 问题汇总
    Linux 常用操作
    CentOS 7 运行级别切换
    Oracle 更新Opatch、打补丁
    django rest framework restful 规范
    CBV FBV rest framework
    CRM
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309161.html
Copyright © 2011-2022 走看看