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‘)
时间: 2024-10-12 15:05:00

JAVA-Unit05: 视图、序列、索引 、 约束的相关文章

序列-索引-约束

序列-索引-约束 1.序列 序列:也是数据库对象之一,作用是生成一系列的数字,序列常与某张表的主键字段提供值使用. 序列的创建: --序列的创建 CREATE SEQUENCE SEQ_NUM_2 START WITH 1 INCREMENT BY 2 START WITH:开始的值. INCREMENT BY :步长. 序列中的函数: A:NEXTVAL(获取序列的下一个值   第一个值获取的是START WITH 后面的值是START WITH+INCREMENT 每次加步长一次 ) 例:

数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引

1.    oracle介绍 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一.比如SilverStream就是基于数据库的一种中间件.ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能:作为一个关系数据库,它是一个完备关系的产品:作为分布式数据库它实现了分布式处理功能.但它的所有知识,只要在一种机型上学习

视图序列索引

视图名字一般是以"V_"开头 视图在SQL语句中体现的角色与表相同,但是视图并不是一张真实存在的表,而只是对应一个 select语句的查询结果集,并将其当做表看待而已,使用视图的目的就是简化sql语句的复杂度,重用子查询,限制数据访问 视图对应的子查询中的字段若含有函数或者表达式,那么该字段必须指定别名.当师徒对应的子查询中的字段使用了别名,那么视图中该字段就用别名来命名 create view v_emp_10 as select empno,ename,sal,deptno fro

【Oracle】第三章索引视图序列

第三章索引视图序列 序列是用来生成唯一,连续的整数的数据库对象.序列是用来自动生成主键或唯一键的值. CREATE SEQUENCE  sequence_name START WITH  integer INCREMENT BY  integer MAXVALUE   integer|nomaxvalue MINVALUE    integer|nominvalue CYCLE|NOCYCLE CACHE  integer|nocache; START WITH     指要生成的第一个序列号,

oracle创建序列&索引&视图

---oracle学习 --oracle的管理系统学习 --oracle的数据管理学习 --oracle的用户管理 --oracle二维表管理 --oracle的其他知识 --oracle的序列,视图,索引 --oracle的分页查询 --oracle的数据库备份 --oracle的图形化界面操作 序列 1 --oracle的序列的学习 2 --创建序列 3 --使用 create sequence 序列名 4 --特点1:默认开始是没有值的,也就是指针指在了没有值的位置. 5 --特点2:序列

Oracle学习(十):视图,索引,序列号,同义词

1.知识点:可以对照下面的录屏进行阅读 视图,序列,索引,同义词 SQL> --视图:虚表 SQL> --视图的优点:简化复杂查询,限制数据访问(银行用的多),提供数据的相互独立,同样的数据可以有不同的显示方式 SQL> --第一个视图: 员工号 姓名 月薪 年薪 SQL> create view view1 2 as 3 select empno,ename,sal,sal*12 annlsal from emp; SQL> --如果显示没有权限,则需要授权,见下图1-1

T-SQL的事物、视图和索引

事物,视图和索引 技能掌握目标: 1.使用事物保证操作的完整性 2.掌握如何创建视图 3.掌握如何创建并使用索引 首先我们要讲的是事物,那么问题来了,请问大家什么事物,他有什么作用? 带来了哪几大好处?分别是什么. 答案:事物就是把多件事情当做一件事情来处理的过程.也就是大家同在一条船上,要活一起活,要over一起over !,这也就是保证了事物的一致性和完整性. 其作用是保证事物的一致性,持久性,原子性,和隔离性. 1.一致性:就是当我们需要更新多条数据的时候,保证他们一荣俱荣,一损俱损. 就

PL/SQL 编程(三 )程序包和包体,触发器,视图,索引

一.程序包和包体 程序包(package):存储在数据库中的一组子程序.变量定义.在包中的子程序可以被其它程序包或子程序调用.但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序. 它具有面向对象程序设计语言的特点,是对这些PL/SQL 程序设计元素的封装.包类似于JAVA语言中的类,其中变量相当于类中的成员变量,过程和函数相当于类方法. create or replace package stuinfo as type stucur is ref cursor; proce

优化MySchool数据库(事务、视图、索引)

Java培训.Android培训.iOS培训..Net培训.期待与您交流! 事务.视图.索引: 事务:当生活逻辑中的“一个步骤”,需要使用多条SQL去完成时,必须使用事务来确保其“完整性“. 视图:简化数据库结构,方便你编写SQL语句(简化SQL语句的编写) 索引:提高“数据检索效率” 事务: ---- 用于保证多条SQL语句的同步执行(要么一起全部执行成功,要么全部都回滚不执行) ---- 语法: Begin Transaction        (开始事务) {  多条SQL语句 } com

MSSQL之八 实现视图与索引

数据库开发人员经常需要提高查询的性能.SQL Server 2008允许实现索引来减少查询的执行时间.而且,你可以通过实现视图对不同用户限制数据的浏览 本章讨论如何创建和管理索引和视图.它也讨论如何实现全文索引以提高数据索引. 重点 ?  创建和管理视图 ?  创建和管理索引 预习功课 ?        创建视图的格式以及注意事项 ?        创建索引的格式以及注意事项 视图 视图是一个虚表,是从一个或者多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的. 使用视图的优点和作用