zoukankan      html  css  js  c++  java
  • JAVA-Unit05: 视图、序列、索引 、 约束

        Unit05: 视图、序列、索引 、 约束    

    视图
    数据库对象之一
    视图在SQL语句中体现的角色与表相同,
    但它并非一张真实存在的表,它对应的
    是一个查询语句的结果集。
    
    创建一个查看10号部门员工信息的视图:
    CREATE VIEW v_emp_dept10
    AS
    SELECT ename,sal,job,deptno
    FROM emp
    WHERE deptno=10
    
    DESC v_emp_dept10
    
    SELECT * 
    FROM v_emp_dept10
    
    修改视图就是替换该视图对应的子查询。
    使用CREATE OR REPLACE即可。
    若视图不存在就创建,存在则替换。
    视图对应的子查询的字段若有别名,则该视图
    对应的字段名就是这个别名。若子查询的字段
    含有函数或表达式,那么该字段必须给别名。
    CREATE OR REPLACE VIEW v_emp_dept10
    AS
    SELECT empno id,ename name,
           sal salary,job,deptno
    FROM emp
    WHERE deptno=10
    
    
    对视图进行DML操作就是对视图数据
    来源的基础表的操作。
    
    INSERT INTO v_emp_dept10
    (id,name,salary,job,deptno)
    VALUES
    (1001,'JACK',3000,'CLERK',10)
    
    SELECT * FROM v_emp_dept10
    SELECT * FROM emp
    
    插入数据时,视图看不到的字段都插入
    基础表对应字段的默认值,所以不能违反
    基础表相应字段的约束条件,尤其是看不到
    的字段的非空约束,否则可能导致插入失败。
    
    
    UPDATE v_emp_dept10
    SET name='JACKSON'
    WHERE id=1001
    
    SELECT * FROM v_emp_dept10
    SELECT * FROM emp
    
    DELETE FROM v_emp_dept10
    WHERE id=1001
    
    
    对视图进行DML操作可能导致对基表
    数据"污染"
    即:对视图进行DML操作的数据视图对其
       不可见,却修改了基表该数据。
    
    INSERT INTO v_emp_dept10
    (id,name,salary,job,deptno)
    VALUES
    (1001,'JACK',3000,'CLERK',20)
    
    SELECT * FROM v_emp_dept10
    SELECT * FROM emp
    
    UPDATE v_emp_dept10
    SET deptno=20
    
    
    为视图添加检查选项可以避免对视图
    进行DML操作时污染基表。
    CREATE OR REPLACE VIEW v_emp_dept10
    AS
    SELECT empno id,ename name,
           sal salary,job,deptno
    FROM emp
    WHERE deptno=10
    WITH CHECK OPTION
    
    
    为视图添加只读选项后,则不能对视图
    进行DML操作。
    CREATE OR REPLACE VIEW v_emp_dept10
    AS
    SELECT empno id,ename name,
           sal salary,job,deptno
    FROM emp
    WHERE deptno=10
    WITH READ ONLY
    
    
    SELECT table_name FROM user_tables
    
    
    视图根据对应的子查询不同,分为简单视图和
    复杂视图。当子查询中含有函数,表达式,分组
    去重,关联查询时,该视图就是一个复杂视图。
    复杂视图不能进行DML操作。
    
    创建一个包含每个部门薪资情况的视图
    CREATE VIEW v_emp_sal
    AS
    SELECT AVG(e.sal) avg_sal,
           SUM(e.sal) sum_sal,
           MIN(e.sal) min_sal,
           MAX(e.sal) max_sal,
           d.deptno,d.dname
    FROM emp e,dept d
    WHERE e.deptno=d.deptno
    GROUP BY d.deptno,d.dname
    
    
    SELECT * FROM v_emp_sal
    
    查看哪个员工的工资高于其部门平均工资?
    SELECT e.ename,e.sal,e.deptno
    FROM emp e,v_emp_sal v
    WHERE e.deptno=v.deptno
    AND e.sal>v.avg_sal
    
    删除视图
    DROP VIEW v_emp_dept10
    
    删除视图中的数据会将基表中对应数据删除,
    但是删除视图本身不会对基表数据产生影响。
    
    
    
    序列
    序列也是数据库对象之一
    作用是生成一系列数字。通常使用它为某表的
    主键字段提供值使用。
    
    CREATE SEQUENCE seq_emp_id
    START WITH 1
    INCREMENT BY 1
    
    序列支持两个伪列:
    NEXTVAL:获取序列下一个数字
    CURRVAL:获取序列当前数字
    
    NEXTVAL会导致序列发生步进,且序列是不能
    回退的。CURRVAL是获取序列最后一次生成的
    数字,新创建的序列至少在调用以此NEXTVAL
    后才可以使用CURRVAL。
    
    SELECT seq_emp_id.CURRVAL
    FROM dual
    
    SELECT * FROM emp
    
    INSERT INTO emp
    (empno,ename,sal,job,deptno)
    VALUES
    (seq_emp_id.NEXTVAL,'JACK',3000,
     'CLERK',10)
    
    UUID的生成方式:
    SELECT SYS_GUID() FROM dual
    
    
    删除序列
    DROP SEQUENCE seq_emp_id
    
    
    
    
    CREATE TABLE employees1 (
      eid NUMBER(6) UNIQUE,
      name VARCHAR2(30),
      email VARCHAR2(50),
      salary NUMBER(7, 2),
      hiredate DATE,
      CONSTRAINT employees1_email_uk UNIQUE(email)
    );
    
    INSERT INTO employees1
    (eid,name,email)
    VALUES
    (NULL,'JACK',NULL)
    
    SELECT * FROM employees1
    
    
    CREATE TABLE employees2 (
    eid NUMBER(6) PRIMARY KEY,
    name VARCHAR2(30),
    email VARCHAR2(50),
    salary NUMBER(7, 2),
    hiredate DATE
    );
    INSERT INTO employees2
    (eid,name)
    VALUES
    (1,'JACK')
  • 相关阅读:
    BP神经网络的数学原理及其算法实现
    机器学习必知的10大算法
    支持向量机通俗导论(理解SVM的三层境界)
    svm算法 最通俗易懂讲解
    read/write/fsync与fread/fwrite/fflush的关系和区别
    ubuntu16.04编译QT5.6所依赖的库
    Linux下的tar压缩解压缩命令详解
    Ubuntu16下编译linux内核,报"mkimage" command not found错的解决
    Git之(一)Git是什么[转]
    mac上完整卸载删除:android studio方案
  • 原文地址:https://www.cnblogs.com/tangshengwei/p/6329540.html
Copyright © 2011-2022 走看看