Oracle分页语句,序列,索引,视图、创建用户授权、撤权
视图(View)
什么是视图
可以通过创建表的视图来表现数据的逻辑子集或数据的组合。视图是基于表或另一个视图的逻辑表,一个视图并不包含它自己的数据,它象一个窗口,通过该窗口可以查看或改变表中的数据。视图基于其上的表称为基表。
视图的优越性 视图限制数据的访问,因为视图能够选择性的显示表中的列。 视图可以用来构成简单的查询以取sigusoft杂查询的结果。例如,视图能用于从多表中查询信息,而用户不必知道怎样写连接语句。 视图对特别的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据。
简单视图:− 数据仅来自一个表− 不包含函数或数据分组− 能通过视图执行
DML 操作复杂视图:− 数据来自多个表− 包含函数或数据分组− 不允许通过视图进行 DML 操作
创建简单视图:create view+表名+ as+select + 查询的表;
创建一个视图,视图中包含部门 id 为 80 的员工的 id,名字以及薪水
创建一个视图,包含部门 id 为 50 的员工 id 使用 ID_ NUMBER 命名该列,包含员工名字使用 NAME 命名该列,包含员工的年薪使用 ANN_SALARY 命名该列。
创建复杂视图
创建一个视图,包含每个部门的部门名称,部门最低薪水、部门最高薪水以及部门的平均薪水。
创建一个视图,包含每个部门的部门名称、部门最低薪水、部门最高薪水以及部门的平均薪水。将部门名称命名为 name、最低薪水命名为 minsal、最高薪水命名为 maxsal、平均薪水命名为 avgsal。
视图中 DML 操作的执行规则
如果视图中包含下面的部分就不能修改数据:组函数GROUP BY 子句DISTINCT 关键字用表达式定义的列
拒绝 DML 操作 : —–with read only;
创建一个简单视图,包含 employees 表中的所有数据,单该视图拒绝 DML 操作。(增删改)
删除视图:—- drop view AA;
删除名称为 emp90 的视图。
内建视图内建视图是一个带有别名 (或相关名) 的可以在 SQL 语句中使用的子查询。一个主查询的在 FROM 子句中指定的子查询就是一个内建视图。
显示那些雇员低于他们部门最高薪水的雇员的名字、薪水、部门号和他们部门最高的薪水。
————————–
Top-N 分析
Top-N 查询在需要基于一个条件,从表中显示最前面的 n 条记录或最后面的 n 条记录时是有用的。子查询或者内建视图产生数据的排序列表,该子查询或者内建视图包含 ORDER BY 子句来确保排序以想要的顺序排列。为了取回最大值,需要用 DESC 参数。 在最后的结果集中用外查询限制行数。外查询包括下面的组成部分:− ROWNUM 伪列,它为从子查询返回的每一行指定一个从 1 开始的连续的值− 一个 WHERE 子句,它指定被返回的 n 行,外 WHERE 子句必须用一个<者<=操作。
TOP–N分析—–rownum 放在主查询里
从 EMPLOYEES 表中显示挣钱最多的 3 个人的名字及其薪水。
显示公司中 4 个资格最老的雇员显示他们的入职时间与名字。
Oracle 的分页查询
不是一次性查询所有的数据,每次只查询一部分数据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器资源的消耗也不大。
分页查询原则:
分页查询——rownum 放在子查询里
在内建视图中通过 rownum 伪劣值的判断来指定数据的数量。
查询雇员表中数据,每次只返回 10 条数据。
———————
序列(Sequence)
序列是用户创建的数据库对象,序列会产生唯一的整数。序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的。序列由一个 Oracle 内部程序产生并增加或减少。序列是一个节省时间的对象,因为它可以减少应用程序中产生序列程序的代码量。序列号独立于表被存储和产生,因此,相同的序列可以被多个表使用。
通过 DDL 语句创建序列sequence 是序列发生器的名字INCREMENT BY n 指定序列号之间的间隔,在这儿 n 是一个整数 (如果该子句被省略,序列增量为 1)START WITH n 指定要产生的第一个序列数 (如果该子句被省略,序列从 1 开始)MAXVALUE n 指定序列能产生的最大值NOMAXVALUE 对于升序序列指定 10^27 为最大值,对于降序序列指定-1 为最大值 (这是默认选项)MINVALUE n 指定最小序列NOMINVALUE 对于升序序列指定 1 为最小值,对于降序序列指定-(10^26)为最小值(这是默认选项)CYCLE|NOCYCLE 指定序列在达到它的最大或最小值之后,是否继续产生(NOCYCLE是默认选项)CACHE n|NOCACHE 指定 Oracle 服务器预先分配多少值,并且保持在内存中(默认情况下,Oracle 服务器缓冲 20 个值)
创建序列:
create sequence 表名 increment by 10 start with 120 maxvalue 9999 nocache nocycle;
创建一个序列名称为:dept_seq,增长间隔为 10,从 120 开始,最大值为 9999,不缓存。不循环使用。
使用工具创建序列
查询序列:select sequence_name, increment_by, max_value, min_value, last_number from user_ sequences;
使用序列
nextval和 currval伪列NEXTVAL 返回下一个可用的序列值,它每次返回一个唯一的被引用值,即使对于不同的用户也是如此CURRVAL 获得当前的序列值在 CURRVAL 获得一个值以前,NEXTVAL 对该序列必须发布
在 location ID 2500 中插入一个新部门名称 Support。
修改与删除序列必须是被修改序列的所有者,或者有 ALTER 权限。用 ALTER SEQUENCE 语句,只有以后的序列数会受影响。用 ALTER SEQUENCE 语句,START WITH 选项不能被改变。为了以不同的数重新开始一个序列,该序列必须被删除和重新创建。
将 deptseq 序列中的增长量修改 20,最大值修改为 999999。
删除序列:——-drop sequence +序列名字;
删除 deptseq 序列
索引(Index)
在关系型数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
索引提供对表中行的直接和快速访问,它的目的是用已索引的路径快速定位数据以减少磁盘 I/O。索引由 Oracle 服务器自动使用和维护,索引逻辑地和物理地独立于他们索引的表,这意味者索引可以在任何时候被创建或删除,并且不影响基表或其它的索引。当删除表时,相应的索引也被删除。
索引的类型
唯一性索引:当你在一个表中定义一个列为主键,或者定义一个唯一键约束时 Oracle服务器自动创建该索引,索引的名字习惯上是约束的名字
非唯一索引:由用户创建,例如,可以创建一个 FOREIGN KEY 列索引用于一个查询中的连接来改进数据取回的速度。
创建索引的方式 自动:在一个表的定义中,当定义一个 PRIMARY KEY 或 UNIQUE 约束时,一个唯一索引被自动创建 手动:用户能够在列上创建非唯一的索引来加速对行的访问。
索引缺点
过多也件坏事,在表上建立更多的索引并不意味者更快地查询,在带索引的表上被提交的每个 DML 操作意味者索引必须更新;与表联系的索引越多,对 Oracle 数据库的影响越大,Oracle 数据库在每次 DML 操作之后必须更新所有的索引。
什么时候创建索引 一个列包含一个大范围的值 一个列包含很多的空值 一个或多个列经常同时在一个 WHERE 子句中或一个连接条件中被使用 表很大,并且经常的查询期望取回少于百分之 2 到 4 的行。
什么时候不创建索引表很小不经常在查询中作为条件被使用的列 大多数查询期望取回多于表中百分之 2 到 4 的行 表经常被更新 被索引的列作为表达式的的一部分被引用
非唯一性索引的类型
oracle 的非唯一性索引:单行索引,复合索引(组合索引),函数索引。
创建索引 :create index +索引名+on+表名+(列名);
创建单行索引:
为 employees 表中的 last_name 创建一个索引并命名为 emp_index。
创建复合索引
为 departments 表 创 建 一 个 包 括 manager_id 与 location_id 复 合 索 引 并 命 名 为dept_man_loc。
创建函数索引
为 departments 表中的 department_name 创建一个带有大写函数的索引 dept_upper2。—–upper() 首字母转为大写
删除索引:——–drop index + 索引名;
删除名称为 dept_upper 的索引。
同义词(Synonym)
同义词可以除去对象名必须带的方案限制,并提供给你一个可替换表名、视图名、序列名和存储过程名或其它对象名。该方法对具有特别长的对象的名字很有用。
创建同义词:—–create synonym +同义词 +for+表名;
给employees表创建个同义词em
删除同义词:—- drop synonym + 同义词名;
删除同义词em
创建用户(User)
什么是 Oracle 用户 : Oracle 用户是用来连接数据库和访问数据库对象的。
创建用户: create user +用户名+ identified by+密码;
需要具备创建用户的权限可以使用 sys 或者 system 用户来创建新用户
使用默认表空间
创建一个用户名称为 u_ test,永久表空间使用 Oracle 默认的永久表空间。
使用指定表空间
创建一个用户名为 u_bjsxt,使用 bjsxt 表空间为他的表空间。(oracle 为密码)
删除用户 drop user +用户名;
删除 u_test 用户
删除用户的同时将该用户下的其他对象一并删掉
数据控制语言(DCL)
grant…授予用户权限
grant +权限+ to+用户名;
为 u_ bjsxt 用户分配创建表、创建视图、创建序列权限以及使用永久表空间权限。
revork..撤销用户权限
revoke 权限 from 用户;
撤销 u_bjsxt 用户创建表的权限。
Oracle 中的角色
角色是命名的可以授予用户的相关权限的组,该方法使得授予、撤回和维护权限容易的多。一个用户可以使用几个角色,并且几个用户也可以被指定相同的角色
创建角色并且授予权限给角色
创建角色 create role +角色名;
创建一个名称为 manager 的角色。
授予权限给一个角色
向 manager 角色中添加创建会话,创建表、创建视图、创建序列。
创建一个名称为 newbjsxt 用户密码为 oracle。该用户使用 bjsxt 表空间。
为用户分配可以无限制的使用永久表空间。
将 manager 角色分配给 newbjsxt 用户。
在 newbjsxt 用户中创建一个测试表,包含一个 id 列类型为整数类型。
撤销角色 revoke +角色+ from +用户;
撤销 newbjsxt 用户的 manager 角色。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/92612.html