当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle常用sql操作整理总结(4)
发布时间:2010/12/4 23:15:12 来源:城市学习网 编辑:ziteng

  1 row created.

  只有运行了序列号的名称. nextval后序列号的名称. currval 才有效才有值.

  3. 查询序列号的情况

  SQL> select sequence_name, min_value, max_value, increment_by, last_number from user_sequences;

  其中last_number指的是序列号的下一个值.

  4. 改变序列号

  SQL> ALTER SEQUENCE sequence [INCREMENT BY n] [{MAXVALUE n | NOMAXVALUE}]

  [{MINVALUE n | NOMINVALUE}]

  [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

  注意: 不能改变它的起始值

  如果要改变序列的起始值, 先把序列号删除掉, 再新建一个.

  5. 删除序列号

  SQL>DROP SEQUENCE sequence;

  6. 不能用序列号的nextval和currval的地方

  视图的查询

  有distinct的查询

  有group by,having,order by的查询

  有子查询的查询

  表里的缺省值

  十四、创建视图

  1. 视图的概念和优点

  视图是基于一个或多个表及视图的一些查询语句, 它象显示数据的视窗, 它本身是不存储数据的.

  视图可以限制数据库的访问, 更好的控制权限

  使用户使用简单的查询语句

  数据的非依赖性

  同一数据的不同表现形式

  2. 创建视图的语法

  SQL> CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view[(alias[, alias]…)]

  AS subquery

  [WITH CHECK OPTION [CONSTRAINT constraint]]

  [WITH READ ONLY]

  参数解释:

  FORCE 表不存在时,视图仍然可以创建成功

  WITH CHECK OPTION 只有符合视图定义的记录才能被插入或修改

  WITH READ ONLY 不允许DML操作

  Oracle8i以后创建视图可以用order by

  3. 创建修改视图的例子

  SQL> CREATE OR REPLACE VIEW salvu41 AS SELECT id, first_name FIRST,

  last_name LAST, salary MONTHLY_SALARY

  FROM s_emp WHERE dept_id = 41;

  SQL> CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal) AS SELECT d.name, MIN(e.salary),

  MAX(e.salary),

  AVG(e.salary) FROM s_emp e, s_dept d WHERE e.dept_id = d.id GROUP BY d.name;

  注意: 如果用select * from table_name创建的视图

  table_name的结构改变后 view要重建或compile后才能显示新的字段内容

  4. 查询视图的数据字典

  SQL> set long 1600;

  SQL> select view_name,text from user_views;

  说明: 可以根据视图text_length来设置set long 数字;

  User_updatable_columns视图能查询视图里能被修改的字段

  5. 简单和复杂的视图对比

  特 性 简单视图 复杂视图

  表的数量 一个 多个

  有函数吗? 没有 有

  有分组操作吗? 没有 有

  有基于视图的DML操作吗? 有 没有

  6. 在视图上可以用DML命令吗?

  可以, 但有一定的限制条件

  没有下面的情况, 可以删除view里的记录. group function, group by, distinct

  没有上面和下面的情况, 可以修改view里的记录. 字段表达式,

  例如: salary*12 含rownum的view

  没有上面两种情况, 且view里含基表里所有非空字段的情况, 可以往view里插入记录.

  7. 在视图里使用 WITH CHECK OPTION约束条件

  SQL> create or replace view empvu41

  as select * from s_emp where dept_id = 41

  with check option constraint empvu41_ck;

  如果运行下面命令会出错ora-01402

  SQL> update empvu41 set dept_id=42 where id=16;

  原因: 视图empvu41里规定只能看部门号为41的记录 修改后会把记录排除在视图empvu41以外

  与它的约束条件冲突

  8. 删除视图

  SQL> DROP VIEW view_name;

  十五、创建索引

  1.索引的概念

  索引是数据库里的一种数据对象

  它利用B*树, hash, bitmap结构直接快速地访问数据

  它和表是分开存放的两个实体

  索引创建好了后, 由系统自动调用和管理

  2. 什么时候创建索引?

  自动创建的索引:唯一关键字, 唯一的约束条件

  手工需要创建的索引:大表查询时, sql语句where后经常用到的字段或字段组合

  字段内容差别很大有大量NULL值表很大, 返回记录数较少

  3. B*树索引的结构 每个索引由字段值和指针或ROWID组成

  4.创建索引的语法

  CREATE INDEX 索引名 ON 表名 ( 字段1, [字段2, ……] ) TABLESPACE 表空间名;

  5.创建索引的注意事项

  创建索引时会加行级独占锁

  一个表的索引最好不要超过三个 (特殊的大表除外)

  最好用单字段索引

  索引最好和表分不同的表空间存放

  结合SQL语句的分析执行情况, 也可以建立多字段的组合索引和基于函数的索引

  大表的索引会占用很大的存储空间

  不要建唯一的索引, 而应该加唯一的约束条件

  6.查询索引的方法

  查询数据字典user_indexes和user_ind_columns

  例子:

  SQL> SELECT ic.index_name, ic.column_name,

  2 ic.column_position col_pos,ix.uniqueness

  3 FROM user_indexes ix, user_ind_columns ic

  4 WHERE ic.index_name = ix.index_name

  5 AND ic.table_name = ‘S_EMP’;

  注意: 数据字典里存放的字符都是大写的.

  7. 不用索引的地方

  表很小

  where后不经常使用的比较字段

  表被频繁修改

  返回记录数很多

  where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件

  8. 重建索引的语法

  ALTER INDEX 索引名 REBUILD TABLESPACE 原来表空间名 NOLOGGING;

  定期重建索引可以减少索引的碎片, 更有效地使用表空间.[NextPage]

  9. 删除索引

  SQL> drop index 索引名;

  SQL> alter table 表名 drop constraint 约束名;

  十六、控制用户访问

  1.权限的类别

  系统级权限: 针对整个系统操作的权限

  如: 用户名/密码, 使用表空间的限额等

  对象级权限: 针对某个具体object操作的权限

  如: 针对某个表, 视图, 表的某个字段的select, update, delete权限

  2. 查看当前数据库的用户信息

  SQL>select username,default_tablespace,temporary_tablespace from dba_users;

  查看在线用户信息

  SQL>select count “number”,username “current username” from v$session group by username;

  用户查看自己的缺省表空间SQL>select username,default_tablespace from user_users;

  3. 创建新用户

  SQL> create user username identified by password

  default tablespace tablespace_name temporary tablespace temp

  quota unlimited on tablespace_name

  quota 1k on system

  [quota 1k on other_tablespace_name ……] ;

  给用户赋权限

  SQL> grant connect, resource to username;

  查看当前用户的权限角色

  SQL> select * from user_role_privs;

  查看当前用户的系统权限和表级权限

  SQL> select * from user_sys_privs;SQL> select * from user_tab_privs;

  4 、常用的角色及其权限

  CONNECT 8 privs 连上Oracle,做最基本操作

  RESOURCE 8 privs 具有程序开发最的权限

  DBA 114 privs 数据库管理员所有权限

  EXP_FULL_DATABASE 5 privs 数据库整个备份输出的权限

  IMP_FULL_DATABASE 64 privs 数据库整个备份输入的权限

  查看角色明细的系统权限

  SQL> select * from role_sys_privs;

  5、改变老用户 可以改变老用户的密码, 缺省表空间, 临时表空间, 空间限额.

  SQL> alter user username identified by password

  default tablespace tablespace_name

  temporary tablespace temp

  quota unlimited on tablespace_name

  quota 1k on system

  [quota 1k on other_tablespace_name ……] ;

  撤销用户的角色或权限

  SQL> revoke role_name or priv_name from username;

  注意事项

  撤消用户的角色dba时, 同时撤消了用户unlimited tablespace的系统权限,

  切记要再次赋予resource角色给此用户

  SQL> grant resource to username;

  6、删除用户

  如果用户下没有任何数据对象

  SQL> drop user username;

  如果用户下有数据对象

  SQL> drop user username cascade;

  注意事项

  如果用户下有含clob,blob字段的表, 应该先删除这些表后,才能用cascade选项完全删除.

  7、角色的概念和管理

  角色是命名多个相关权限的组合. 能把它赋于其它的用户或角色我们能创建角色,

  使权限管理更容易一些.

  8、赋于系统的权限语法和例子

  语法:

  SQL> GRANT sys_priv TO {user|role|PUBLIC} [WITH ADMIN OPTION];

  例子:

  SQL> GRANT create session TO sue, rich;

  SQL> GRANT create table To scott, manager;

  注意:

  如果用WITH ADMIN OPTION通过中间用户赋于的系统权限中间用户删除后, 系统权限仍然存在.

  9、赋于数据对象级的权限语法和例子

  语法:

  SQL> GRANT object_priv [(columns)] ON object TO {user|role|PUBLIC} [WITH GRANT OPTION];

  例子:

  SQL> GRANT select ON s_emp TO sue, rich;

  SQL> GRANT update (name, region_id)

  ON s_dept TO scott, manager;

  注意: 如果用WITH GRANT OPTION通过中间用户赋于的对象权限

  中间用户删除后,对象权限就不存在了.

  10、rownum表中的行号,自动生成的,只能用<,<=操作符

  rowid用来唯一表示数据库表中的一行

  在oralce上的分页需要用到伪列,只所以这么做,是因为oralce不支持rownum比较

  比如说找出第三行纪录,那就是

  select last_name, salary

  from (select rownum a, b.*

  from s_emp b)

  where a=3

  如果找出第10行到第20行的数据的话,那就必须用到

  select last_name, salary

  from (select rownum a, b.*

  from s_emp b)

  where a > 10 and a < 2;

  这是sql级别的分页,优点是速度快,缺点是可移植性差;

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved