视图(View)
视图也被称作虚表,也就是虚拟的表,是一组数据的逻辑表示。视图对应一个select语句,结果集被赋予一个名字,也就是视图的名字。视图本身不包含任何数据,它只是包含映射到基表的一个查询语句,当基表数据发声变化,视图数据也随之变化。视图创建后,可以像操作表一样操作视图,主要是查询。根据视图所对应的子查询种类分为几种类型:
select语句是基于单表建立,并且不包含任何函数运算、表达式或者分组函数,叫做简单视图,此时视图是基表的子集。select语句是基于单表建立,但是包含了单行函数、表达式、分组函数或者group by子句,叫做复杂视图。select语句是基于多个表,叫做连接视图。视图的作用:如果需要经常执行某种复杂查询,可以基于这个复杂查询建立视图,以后查询此视图即可,可以简化复杂查询。视图本质上就是一条select语句,所以当访问视图时只能访问到对应的select语句中涉及到的列,对基表中的其它列起到安全和保密的作用,限制数据的访问。对scott用户授权(在sysdba角色下)
grant create view to scott;创建视图(用户必须有创建视图的权限)
create or replace view v_empasselect ename,sal from emp;查看视图结构
desc v_emp;删除视图
drop view v_emp;查询视图中的数据:
select * from v_emp;--------------------------------------------------------------------------------------------
序列(sequence)用在哪里?在mysql数据库中,可以设置id字段以自动增长的方式,实现数据的插入create table mysql_tbl(id int primary key auto_increment,name varchar(100))在oracle中使用序列实现mysql表中id字段自动增长序列是oracle中的一种对象create sequence seq_user --创建序列的关键字和序列名称increment by 1 --自动增加的步长 默认1start with 1 --开始的大小值 默认1-- maxvalue|minvalue num --最大值和最小值 默认nomaxvalue 默认的最大值是10^26nomaxvalue --默认的不限制最大值-- cycle|nocycle --是否轮回 默认nocyclecycle-- cache num|nocache --缓存区大小 默认20cache 3使用序列select seq_user.nextval from dual;select seq_user.currval from dual;
删除序列
drop sequence seq_user;建表
create table t_user(id number,username varchar2(100),password varchar2(48),regtime date,constraint pk_user primary key(id));insert into t_user values (seq_user.nextval,'Owen','123123',sysdate);
---------------------------------------------------------------------------------------需要一张表t_product
编号 主键 自动增长产品名称 非空产品销量 非空 默认0产品库存 非空 默认0产品初始化销量创建表
create table t_product(p_no number,p_name varchar2(100) not null,p_sal_num number default 0,p_has_num number default 0,p_sal_num_start number,constraint pk_product primary key(p_no));创建序列
create sequence seq_product --创建序列的关键字和序列名称插入5条数据insert into t_product values(seq_product.nextval,'苹果5s',128,200,110);insert into t_product values(seq_product.nextval,'苹果6',88,150,0);insert into t_product values(seq_product.nextval,'苹果6s',98,100,50);insert into t_product values(seq_product.nextval,'苹果6plus',128,200,110);insert into t_product values(seq_product.nextval,'苹果7',99,0,99);建立视图(不显示产品初始化销量)
create or replace view v_productasselect p_no,p_name,p_sal_num,p_has_num from t_product;查询视图
select * from v_product;从视图插入一条数据
insert into v_product values(seq_product.nextval,'苹果8',0,0);