zoukankan      html  css  js  c++  java
  • 数据库对象

    同义词是先用数据库对象的别名;序列用于生成唯一、连续的序号;

    视图是基于一个或多个表的虚拟表;索引是与表相关的一个可选结构,用于提高SQL语句执行的性能

    一、数据库对象:

       模式对象:

    数据库对象是逻辑结构的集合,最基本的数据库对象是表;

    其他对象包括:create增、drop删、改alter

      同义词、序列、视图、索引

    1、同义词:

    ①、 现有对象的一个别名:

      简化SQL语句,隐藏对象的名称和所有者,提供对对象的公共访问;

    ②、类型:

    私有同义词:

      只能在其模式下内访问,且不能与当前模式的对象同名(当前用户下使用);

    公有同义词:

      可被所有的数据库用户访问。只能是管理员用户创建。

    ③、私有:synonym(system身份登录创建)

    ---创建用户
    
    CREATE  USER  test  IDENTIFIED  BY  123456;--创建一个用户名为 test 密码为123456的用户
    GRANT  CONNECT , CREATE  SYNONYM TO test; ---授予权限(连接数据库,创建同义词--起别名)
    GRANT  SELECT   ON   SCOTT.EMP  TO test;--查询
    GRANT  DELETE  ON   SCOTT.EMP TO test;--删除
    GRANT  UPDATE  ON  SCOTT.EMP TO test;--
    
    select * from scott.emp;
    create synonym staff for scott.emp;--起别名--提高安全性
    select * from staff;---私有同义词,只能谁创建谁访问

    ④、公有:public

    需要sys或者system用户来创建

    --一sys或system身份登录,创建公有同义词--谁都能查
    create public synonym emps for scott.emp;  
    select * from emps;

    修改和删除的原则是:谁创建谁修改、删除

    二、序列:

    1、Oracle是不支持自增长的;

      ①、序列是用于生成唯一、连续序号的对象;

      ②、序列可以是升序,也可以是降序的;

      ③、创建:create sequence(前三个必须写)

    2、访问序列:

    nextval:返回序列的下一个值;

    currval:返回序列的当前值

    ---创建序列(相当于计数器,与表无关)
    create sequence seq_student start with 1 increment by 1;
    
    create table stu(
           ssid int primary key,
           sname varchar(10)
    )
    --给ssid赋值为序列的值
    insert into stu values(seq_student.nextval,'李四');---nextval 下一个值
    insert into stu values(seq_student.nextval,'张三');
    select * from stu
    
    select seq_student.currval from dual;-- currval 当前值

    注意:

    序列与表无任何关系!!!

     3、当出现异常需要修改和删除的序列时,友情提示:删除重新建!

    三、视图:

    1、视图以经过定制的方式显示来自一个或多个表的数据;

      可以视为“虚拟表”或“存储的查询”;

    2、创建视图所依据的表称为“基表”;

    3、优点:

       提供了另外一种级别的表安全性;

      隐藏的数据的复杂性;

      简化的用户的SQL命令;

      隔离基表结构的改变;

      通过重命名列,从另一个角度提供数据。

    4、

    --创建视图(scott下,将查询的结果封装到个视图里面)
    
    select * from emp
    select * from dept
    select * from emp join dept on emp.deptno=dept.deptno;
    
    --授权(system下给scott用户授予创建视图的权利)
    grant create view to scott;
    
    create view emp_dept as (select empno,ename,job,mgr,sal,comm,emp.deptno,dname,loc from emp join dept on emp.deptno=dept.deptno);
    
    --查询视图
    select * from emp_dept

    5、在视图上可以使用修改数据的DML语句:

    不过有如下限制:

      只能修改一个底层的基表;

      如果修改违反了基表的约束条件,则无法更新视图;

      如果视图包含连接数据库、去重关键字等,则将无法更新视图;

      如果视图包含伪列或表达式,则将无法更新视图

      (总结:可以修改数据,但尽量不要在视图上修改!!!在基表上改

    6、使用create or replace语句修改视图定义(尽量不要如此麻烦)

     CREATE  OR REPLACE   [FORCE] VIEW   
      view_name [(alias[, alias]...)] 
      AS  
      select_statement
      [WITH CHECK OPTION]
      [WITH READ ONLY];

    四、索引:

    1、索引是与表相关的一个可选结构;

      用以提高SQL语句执行的性能;

      在逻辑上和物理上都独立于表的数据;

      Oracle自动维护索引

    2、

    --创建表
    create table t_testseq
    (
      id number,
      name varchar2(10)
    );
    --创建序列
    create sequence seq_value
    start with 1
    increment by 1;
    -- oracle里面事务需要手动提交事务
    select * from t_testseq where id=50000    -- 0.023
    
    
    --创建索引 CREATE  INDEX    索引名    ON   表名 (索引字段)
    create index  t_testseq on t_testseq(id)  -- 0.015
    
  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/21-forever/p/11265924.html
Copyright © 2011-2022 走看看