数据库对象
同义词是先用数据库对象的别名;序列用于生成唯一、连续的序号;
视图是基于一个或多个表的虚拟表;索引是与表相关的一个可选结构,用于提高SQL语句执行的性能
一、数据库对象:
模式对象:
数据库对象是逻辑结构的集合,最基本的数据库对象是表;
其他对象包括:create增、drop删、改alter
同义词、序列、视图、索引
1、同义词:
①、 现有对象的一个别名:
简化SQL语句,隐藏对象的名称和所有者,提供对对象的公共访问;
②、类型:
私有同义词:
只能在其模式下内访问,且不能与当前模式的对象同名(当前用户下使用);
公有同义词:
可被所有的数据库用户访问。只能是管理员用户创建。
③、私有:synonym(system身份登录创建)
---创建用户 CREATE USER test IDENTIFIED BY 123456;--创建一个用户名为 test 密码为123456的用户 GRANT CONNECT , CREATE SYNONYM TO test; ---授予权限(连接数据库,创建同义词--起别名) GRANT SELECT ON SCOTT.EMP TO test;--查询 GRANT DELETE ON SCOTT.EMP TO test;--删除 GRANT UPDATE ON SCOTT.EMP TO test;--增 select * from scott.emp; create synonym staff for scott.emp;--起别名--提高安全性 select * from staff;---私有同义词,只能谁创建谁访问
④、公有:public
需要sys或者system用户来创建
--一sys或system身份登录,创建公有同义词--谁都能查 create public synonym emps for scott.emp; select * from emps;
修改和删除的原则是:谁创建谁修改、删除
二、序列:
1、Oracle是不支持自增长的;
①、序列是用于生成唯一、连续序号的对象;
②、序列可以是升序,也可以是降序的;
③、创建:create sequence(前三个必须写)
2、访问序列:
nextval:返回序列的下一个值;
currval:返回序列的当前值
---创建序列(相当于计数器,与表无关) create sequence seq_student start with 1 increment by 1; create table stu( ssid int primary key, sname varchar(10) ) --给ssid赋值为序列的值 insert into stu values(seq_student.nextval,'李四');---nextval 下一个值 insert into stu values(seq_student.nextval,'张三'); select * from stu select seq_student.currval from dual;-- currval 当前值
注意:
序列与表无任何关系!!!
3、当出现异常需要修改和删除的序列时,友情提示:删除重新建!
三、视图:
1、视图以经过定制的方式显示来自一个或多个表的数据;
可以视为“虚拟表”或“存储的查询”;
2、创建视图所依据的表称为“基表”;
3、优点:
提供了另外一种级别的表安全性;
隐藏的数据的复杂性;
简化的用户的SQL命令;
隔离基表结构的改变;
通过重命名列,从另一个角度提供数据。
4、
--创建视图(scott下,将查询的结果封装到个视图里面) select * from emp select * from dept select * from emp join dept on emp.deptno=dept.deptno; --授权(system下给scott用户授予创建视图的权利) grant create view to scott; create view emp_dept as (select empno,ename,job,mgr,sal,comm,emp.deptno,dname,loc from emp join dept on emp.deptno=dept.deptno); --查询视图 select * from emp_dept
5、在视图上可以使用修改数据的DML语句:
不过有如下限制:
只能修改一个底层的基表;
如果修改违反了基表的约束条件,则无法更新视图;
如果视图包含连接数据库、去重关键字等,则将无法更新视图;
如果视图包含伪列或表达式,则将无法更新视图
(总结:可以修改数据,但尽量不要在视图上修改!!!在基表上改)
6、使用create or replace语句修改视图定义(尽量不要如此麻烦)
CREATE OR REPLACE [FORCE] VIEW view_name [(alias[, alias]...)] AS select_statement [WITH CHECK OPTION] [WITH READ ONLY];
四、索引:
1、索引是与表相关的一个可选结构;
用以提高SQL语句执行的性能;
在逻辑上和物理上都独立于表的数据;
Oracle自动维护索引
2、
--创建表 create table t_testseq ( id number, name varchar2(10) ); --创建序列 create sequence seq_value start with 1 increment by 1; -- oracle里面事务需要手动提交事务 select * from t_testseq where id=50000 -- 0.023 --创建索引 CREATE INDEX 索引名 ON 表名 (索引字段) create index t_testseq on t_testseq(id) -- 0.015