SQL 基础之创建其他方案对象(十五)

视图概述:

– 从视图中创建、修改和检索数据

– 在视图上的数据操纵语言(DML)操作

– 删除视图

数据库对象

Object 对象 Description 描述
Table 表 基本的数据存储集合,由行和列组成。
View 视图 从一张表或多张表中抽出的逻辑上相关的数据集合
Sequence 序列 生成规律的数值
Index 索引 提高查询性能
Synonym 同义词 给对象起的别名

什么是视图?我的理解就是从一张表或多张表创建一个自定义的关联虚拟表

视图有如下几个优点:

  • 限制数据访问
  • 简化查询
  • 数据独立性
  • 避免重复访问相同的数据

简单视图和复杂视图

特点 简单视图 复杂视图
表的数量 One One or more 
包含函数 No Yes
包含分组数据 No Yes
通过视图做 DML 操作 Yes Not alway

创建视图

CREATE VIEW 子句中嵌入子查询:

create [or replace] [force|noforce] view myview

[(alias[, alias]...)]

as subquery

[with check option [constraint constraint]]

[with read only [constraint constraint]];

  • 子查询可以包含复杂的 SELECT 语法
  • With check option: 防止插入不可见的行,防止从视图中丢失的更新。

1、创建视图emp80,包含部门为80的员工详细信息:

create view  emp80

as select employee_id, last_name, salary

from employees

where department_id = 80;

使用 SQL*Plus 的 DESCRIBE 命令描述视图结构

desc emp80

2、在子查询中使用列别名创建视图:

create view  salv50

as select employee_id id_number, last_name name,

salary*12 ann_salary

from employees

where department_id = 50;

在选择视图中的列时应使用别名

修改视图

使用CREATE OR REPLACE VIEW 子句修改EMPVU80视图。为每一列都增加别名:

create or replace view emp80

(id_number, name, sal, department_id)

as select employee_id, first_name || ‘ ‘

|| last_name, salary, department_id

from employees

where department_id = 80;

在 CREATE OR REPLACE VIEW 子句中列出来的别名要与子查询中各列相对应

创建复杂视图

创建一个包含组函数,从两张表中显示数据的复杂视图:

create or replace view dept_sum_vu

(name, minsal, maxsal, avgsal)

as select d.department_name, min(e.salary),

max(e.salary),avg(e.salary)

from employees e join departments d

on (e.department_id = d.department_id)

group by d.department_name;

视图上执行 DML  操作的规则-- DELETE

可以在简单视图上执行DML操作

当视图定义中包含以下元素之一时不能删除行

– 组函数

– GROUP BY 子句

– DISTINCT 关键字

– ROWNUM 伪列

视图上执行 DML  操作的规则-- UPDATE

当视图定义中包含以下元素之一时不能修改数据:

– 组函数

– GROUP BY 子句

– DISTINCT 关键字

– ROWNUM 伪列

– 表达式定义的列

视图上执行 DML 操作的规则-- INSERT

当视图定义中包含以下元素之一时不能插入数据:

– 组函数

– GROUP BY 子句

– DISTINCT 关键字

– ROWNUM 伪列

– 表达式定义的列

– 表中非空的列在视图定义中未包括

WITH CHECK OPTION 约束

使用 WITH CHECK OPTION 子句确保DML只能在特定的范围内执行:

create or replace view empvu20

as select *

from employees

where department_id = 20

with check option constraint empvu20_ck ;

任何违反WITH CHECK OPTION 约束的请求都会失败

屏蔽 DML  操作

  • 可以使用 WITH READ ONLY 选项屏蔽对视图的DML 操作
  • 任何 DML 操作都会返回一个Oracle server 错误

create or replace view empvu10

(employee_number, employee_name, job_title)

as select employee_id, last_name, job_id

from employees

where department_id = 10

with read only;

删除视图

删除视图只是删除视图的定义,并不会删除基表的数据

drop view emp80;

drop view slav;

序列

  • 自动提供唯一的数值
  • 共享对象
  • 主要用于提供主键值
  • 可代替应用程序生成序号
  • 将序列值缓存到内存中,可以提高访问效率

CREATE SEQUENCE  语法

定义一个序列自动生成连续的数字:

create sequence sequence

[increment by n]

[start with n]

[{maxvalue n | nomaxvalue}]

[{minvalue n | nominvalue}]

[{cycle | nocycle}]

[{cache n | nocache}];

  • 创建序列 DEPT_DEPTID_SEQ 为表 DEPARTMENTS 提供主键。
  • 不是用 CYCLE 选项

create sequence dept_deptid_seq

increment by 10

start with 120

maxvalue 9999

nocache

nocycle;

NEXTVAL 和 和 CURRVAL伪列

  • NEXTVAL 返回下一个可用的序列值。它返回一个唯一的值每次引用它的时候,任何用户都可以引用它
  • CURRVAL得到当前的序列值
  • 使用 CURRVAL 之前必须发出 NEXTVAL

使用序列

插入一个新的部门为“Support” 位置ID为 2500

insert into departments(department_id,

department_name, location_id)

values (dept_deptid_seq.nextval,

‘support‘, 2500);

序列 DEPT_DEPTID_SEQ 显示当前值

select dept_deptid_seq.currval from dual;

缓存序列值

  • 将序列值缓存到内存中,可提高访问效率
  • 序列在下列情况下出现“断号”:

– 发生回滚

– 系统崩溃

– 序列用于其他的表

可以修改序列的增量、最大值、最小值,循环选项或缓存:

alter sequence dept_deptid_seq

increment by 20

maxvalue 999999

nocache

nocycle;

修改序列的注意事项

  • 必须是序列的拥有者或对序列有 ALTER 权限
  • 只有将来的序列值会被改变
  • 改变序列的初始值只能通过删除序列之后重建序列的方法实现
  • 执行一些验证(例如,新的 MAXVALUE小于当前的序列号)

使用 DROP 语句删除序列:

drop sequence dept_deptid_seq;

索引:

是一个方案对象

通过指针加速 Oracle 服务器的查询速度

通过使用快速路径访问方法来快速定位数据,可以减少磁盘I/O

索引与表相互独立

Oracle 服务器自动使用和维护索引

创建索引:

自动创建:在定义 PRIMARY KEY 或 UNIQUE 约束后系统自动在相应的列上创建唯一性索引。

手动创建:用户可以在其它列上创建非唯一的索引,以加速查询。

在一列或多列上创建索引语法:

create [unique][bitmap]index index

on table (column[, column]...);

2、在表 EMPLOYEES的 LAST_NAME字段上创建索引,提高查询访问速度:

create index emp_last_name_idx on  employees(last_name);

创建索引注意事项

删除索引

使用 DROP INDEX 命令,从数据字典中删除索引:

drop index index;

从数据字典中删除索引:emp_last_name_idx

drop index emp_last_name_idx;

删除索引,你必须是索引的拥有者或者拥有 DROP ANY INDEX 权限。

同义词

创建对象的同义词

通过创建同义词简化对象访问(一个对象的另一个名字),使用同义词您可以:

方便访问其它用户的对象

缩短对象名字的长度

创建同义词语法:

create [public] synonym synonym for object;

创建和删除同义词示例

1、为视图 DEPT_SUM_VU 创建一个较短名称的同义词:

create synonym d_sum for dept_sum_vu;

2、删除同义词

drop synonym d_sum;

时间: 2024-10-29 19:08:35

SQL 基础之创建其他方案对象(十五)的相关文章

ParisGabriel:Python全栈工程师(0基础到精通)教程 第十五课(函数嵌套、变量作用域)

ParisGabriel 感谢 大家的支持 每天坚持 一天一篇 点个订阅吧  灰常感谢    当个死粉也阔以 Python人工智能从入门到精通 globals()/locals()函数: globals()返回当前全局作用域内变量的字典 locals() 返回当前局部作用域内变量的字典函数变量: 函数名是变量,它在def 语句创建时绑定函数 fa1 = fa 没有括号 绑定函数 fa1 = fa() 返回结果 函数的变量名可以序列交换算法一个函数可以作为另一个函数的实参传递: 例如: def m

SQL 基础之多表查询(十)

JOINS 类型和它的语法 Natural joins(自然连接): – NATURAL JOIN 子句 – USING 子句 – ON 子句 自连接 非等值连接 Outer joins(外连接): – LEFT OUTER JOIN(左外连接) – RIGHT OUTER JOIN(右外连接) – FULL OUTER JOIN(全外连接) 笛卡尔积 – Cross join(交叉连接) 语法: select table1.column, table2.column from table1 [

(大数据工程师学习路径)第四步 SQL基础课程----创建数据库并插入数据

一.练习内容 1.新建数据库 首先,我们创建一个数据库,给它一个名字,比如“mysql_shiyan”,以后的几次实验也是对mysql_shiyan这个数据库进行操作. 语句格式为“CREATE DATABASE <数据库名字>;”,(注意不要漏掉“;”)因此具体命令为: CREATE DATABASE mysql_shiyan; 创建成功后输入命令“show databases;”(注意不要漏掉“;”)检查一下: 在大多数系统中,SQL语句都是不区分大小写的,因此以下语句是等价的: CREA

sql基础语法-创建表和约束

创建数据库表 USE SQL2016 IF OBJECT_ID('dbo.Employees','U') IS NOT NULL DROP TABLE dbo.Employees; Create TABLE dbo.Employees ( empid INT NOT NULL, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, salary Money Null ); USE SQL2016 IF OBJECT_ID('

SQL必知必会 笔记 第十五章 插入数据

15.1数据插入 插入可以用几种方式使用: (1)插入完整的行 (2)插入行的一部分 (3)插入某些查询的结果 15.1.1插入完整的行 INSERT INTO Customers VALUES('1000000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL); 对每个列必须提供一个值,如果某个列没有值,应该用NULL值. 保证INSERT语句的更安全 INSERT INTO Cus

ParisGabriel:Python全栈工程师(0基础到精通)教程 第二十五课(文件操作、)

ParisGabriel 每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰 Python人工智能从入门到精通 最近简直要死了 发烧感冒 喉咙痛..... 如何长期保存计算机中数据: 需要文件操作 文件 file: 文件是用于数据存储的单位 文件通常用来长期储存数据 文件中的数据是以字节为单位进行顺序储存的文件的操作流程: 1.打开文件 2.读/写文件 3.关闭文件 注: 任何操作系统, 一个应用程序同时打开文件的数量有最大数限制文件打开函数: open(file, mode='rt')

C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例

DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data source=localhost;uid=sa;pwd=aspent;database=LOGINDB" string sqlstr=" select * from USER "; //利用构造函数,创建DataAdapter SqlDataAdapter da=new Sql

oracle sql 基础(五):数据定义语言(创建和管理序列、索引、同义词)

许多应用程序要求使用唯一的数字作为主键的值,你即可以在应用程序中构建代码来处理这种需求,也可以用一个序列来产生唯一的数字.如果你想要增进某些查询的性能,你应该考虑创建一个索引,你也可以用索引在列或列的集合上强制唯一性.你可以用同义词为对象提供可替代的名字.下面我们来介绍序列.索引和同义词三个数据库对象.       一.创建和管理序列 序列是用户创建的数据库对象,可以被多个用户共享. 序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的.序列由一个Oracle内部程序产生并增加或减少

GDI+ 绘图基础-图形设备&amp;创建Graphics对象

@1.图形设备接口 GDI+(Graphcis Device Interface Plus,图形设备接口)是Microsoft.Net中实现图形.图像及文字处理的W32API.所有的GDI+功能都包含在C#系统的System.System.Drawing.System.Drawing.Image.System.Drawing.Drawing2D和System.Drawing.Text等命名空间的各个类中,图形图像处理中常用的命名空间如下: System:包括常用基础数据类型和24个子命名空间 S