设为首页 收藏本站
查看: 1202|回复: 0

[经验分享] SQL 基础之创建其他方案对象(十五)

[复制链接]

尚未签到

发表于 2018-10-20 12:03:18 | 显示全部楼层 |阅读模式
  视图概述:
  – 从视图中创建、修改和检索数据
  – 在视图上的数据操纵语言(DML)操作
  – 删除视图
  数据库对象
Object 对象Description 描述Table 表基本的数据存储集合,由行和列组成。View 视图从一张表或多张表中抽出的逻辑上相关的数据集合Sequence 序列生成规律的数值Index 索引提高查询性能Synonym 同义词给对象起的别名  什么是视图?我的理解就是从一张表或多张表创建一个自定义的关联虚拟表
DSC0000.jpg

  视图有如下几个优点:

  •   限制数据访问
  •   简化查询
  •   数据独立性
  •   避免重复访问相同的数据
  简单视图和复杂视图
特点简单视图复杂视图表的数量OneOne or more 包含函数NoYes包含分组数据NoYes通过视图做 DML 操作YesNot 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>  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;
  修改序列的注意事项


  •   必须是序列的拥有者或对序列有>
  •   只有将来的序列值会被改变
  •   改变序列的初始值只能通过删除序列之后重建序列的方法实现
  •   执行一些验证(例如,新的 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);
  创建索引注意事项
DSC0001.jpg

  删除索引
  使用 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;


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624040-1-1.html 上篇帖子: Mybatis 项目开发实际常用SQL笔记总结 下篇帖子: SQL 基础之用户角色日常操作(十六)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表