1.1视图管理
创建视图的语法:
CREATEVIEW view_nameAS
SELECT column_name1,column_name2--多个列用逗号隔开
FROM table_name
WHERE condition;
--例子:创建一个视图,查询所有员工工号,员工姓名及所在的部门名称
createview emp_dept--create or replace 允许在重名情况下创建视图,取代旧版本的视图
as
select e.empno,e.ename,d.dname
from emp e, dept d
where e.deptno=d.deptno;
1.2创建可更新视图
可更新视图是指可以通过视图进行insert,delete和update操作而更改基表。
在可更新视图定义中,如果出现下列情景,则无法进行上述三种操作。
a.集合运算符,比如union、unionall、intersect、minus。
b.distinct操作符
c.组函数,比如avg、count、max、min、sum。
d.group by、order by子句
e.select 包含表达式
f.子查询
g.连接查询(有例外)
--例子1:复制表emp,检验在视图上的insert、delete和update操作对表数据的影响。
--第一步,复制表
createtable emp1
as
select empno, ename, jobfrom empwhere1=2;--加上此条件不复制数据
--第二布,创建视图
createview v_emp1
as
select *from emp1;
--测试~~
insertinto v_emp1values(7369,'SMITH','CLERK');
select *from emp1;
select *from v_emp1;
--例子2:创建一个包含从两个表中提取数据的复杂视图
createview dept_sum(name,minsal,maxsal,avgsal)
as
select d.dname,min(e.sal),max(e.sal),avg(e.sal)
from emp e, dept d
where e.deptno=d.deptnogroupby d.dname;
--测试
insertinto dept_sumvalues('sales',32,332,323222);
系统提示:无法修改与非键值保存表对应的列
--例子3:链接视图
droptable emp1;
--复制表emp
createtable emp1
as
select *from emp;
--复制表dept
createtable dept1
as
select *from dept;
--创建视图emp_dept
createorreplaceview emp_dept
as
select e.empno,e.ename,e.sal,e.deptno,d.dname,d.loc
from emp1 e, dept1 d
where e.deptno=d.deptno;
目前这个视图还是不能进行增删改操作的,必须对两个基表加上适当的主外键就可以了。
不深究了,这个目前为止工作中都没用过!
1.3withcheckoption(不改不插可删)和withreadonly(只可读)选项
--例1:with check option
createorreplaceview v_emp
as
select empno, ename, job
from emp1
where job='ANALYST'
withcheckoptionconstraint v_emp_constraint;
此时插入和修改都会报错。
--例2:with read only
createorreplaceview v_emp
as
select empno, ename, job
from emp1
where job='ANALYST'
withreadonly;--完全禁止通过视图修改表资料
2.1索引管理
3.1序列管理
创建序列的时候,指定cache值oracle可以预先再内存中存放一些序列,这样存取会快一点,但是,如果数据库忽然不正常关闭,
有可能会导致跳号。可以使用nocache防止这种情况,建的时候和建后都可以加。
建后加:
altersequence序列名nocache;
4.1同义词管理
同义词是指为表、视图和序列等对象起的另一个名字。
5.1用户管理
模式(schema):是oracle数据库中一个重要的概念。模式被用户所拥有,与用户名相同。模式可以看成房子,用户就是主人。
oracle数据库对象分为两类:模式对象和非模式对象。表和视图等都是模式对象,用户和角色是非模式对象。
通过<模式名>.<对象名>才能唯一确定一个对象,不过,oracle允许用户访问自己模式对象时省略模式名。
当DBA创建一个新数据库用户时,一个与用户同名的模式也被同时建立。在用户建立数据库对象时,数据库系统会把该对象的名称记录
在与用户同名的模式中。
例如:通过<模式名>.<对象名>的方式访问dept表
select *from scott.dept;
6.1创建用户
create user命令创建用户:
createuser<username>identifiedby <pwd>;
更改用户密码:
alteruser usernameidentifiedby密码;
删除用户:
dropuser usernamecascade;--cascade选项的作用是一并删除用户对象(表)。
7.1权限管理
oracle数据库中用户权限分为:系统权限和对象级权限。
grant命令:
grantcreatesessionto用户名;--授予用户连接数据库的权限
revoke命令:
revokeupdate,deleteon模式.表名;--收回更改和删除模式.表名的权限
8.1角色管理
角色是一个具有名字的权限集合,可以授权给一个或多个用户。当把一个角色授予某个用户时,这个用户就自动拥有了这个角色的
所有权限。
oracle数据库除允许DBA定义角色外,还提供了一些预定义的角色,如CONNECT、RESOURCE和DBA等。DBA角色拥有所有的系统级权限。
--create role命令:
createrole角色名identifiedby密码;
grant角色名to用户名;--将某个角色授予用户
--alter role命令:
alterrole角色名identifiedby密码;--为角色设置密码
--set role命令:
setrole角色名identifiedby密码;--启动角色
setroleall;--启动所有角色
setrolenone;--禁止角色
--drop role命令:
droprole角色名;--删除角色
revoke角色名from用户名;--撤销用户角色
9.1数据字典
数据字典是oracle存放有关数据库信息的地方,用来描述数据库元数据,比如一个表的创建者信息、创建时间信息和用户访问权限信息等。
数据字典分为静态数据字典和动态数据字典。用户访问静态数据字典的时候数据字典的数据不会发生改变;动态数据字典以来数据库运行的
性能,反应数据库运行的一些内在信息。
数据字典由表和视图组成,只能访问,不能修改。
oracle数据字典的视图有三个不同的实例,它们的前缀为:user_,all_和dba_。
user_*
该视图存储了关于当前用户所拥有的对象的信息(即所有在共用户模式下的对象)。
all_*
该视图存储了当前用户能够访问的对象的信息(与user_*相比,它不需要拥有该对象,只需具有该对象的权限即可)。
dba_*
该视图存储了数据库中所有对象的信息(前提是用户具有访问这些数据库的权限,一般来说必须具有管理权限)。