视图、序列、索引
来源:互联网 发布:ios 去掉数组小括号 编辑:程序博客网 时间:2024/06/16 23:44
视图
视图也被称为虚拟表或虚表,是一组数据的逻辑表示 ,视图对应于一条select语句,结果集被赋予一共名字,及视图名字视图本身并不包含任何数据,只包含映射到基表的一个查询语句,也就是基表的数据发生变化,视图数据也随之发生变化视图创建后,可以像操作表一样操作视图,一般用于查询
视图的分类
简单视图:基于单表建立的,且不包含任何函数运算、表达式或分组函数复杂视图:包含了单行函数、表达式、分组函数,创建时编写为表达式,单行函数分组函数定义别名链接视图:基于多表的建立的视图作用:需要经常执行某项复杂的查询,可以根据这个复杂的查询建立视图视图的本质就是一条select语句,所以访问视图只能访问到select语句中对应到的列,对基表的其他列是保密和安全的。语法:create view viewName AS (查询语句):注意创建视图,需要相应的权限:grant create view to 用户;create or replace view viewName AS(新的select语句):修改现有存在视图的select语句desc viewName:查看视图结构注意:1:查询时是以创建的试图的列明查询。2:视图本身不包含数据,只是基表的逻辑映射,故操作DML时,实际是对基表操作3:执行insert操作时,基表的非空列必须在视图内,不在则不能执行insert操作。如果视图包含函数,表达式,分组语句,distinct或rownum伪劣,也不能执行DML操作4:dml操作不能违反约束操作5:复杂视图不允许DML操作
具有check option约束的视图
create [or replace] view viewName AS (查询语句) [with check option],表示对视图所做的修改,必须在视图可见范围内insert在视图认可查看,update操作,修改后的结果必须能通过视图查看,delete操作只能删除现有视图能查到的记录
具有read only约束的视图
对简单的视图做DML操作是合法的,但不安全故可以创建只读来避免这种情况语法:create [or replace] view viewName AS (查询语句) [with read only]
和视图相关的数据字典
user_objects:查询到所有视图的名称user_views:可查询到具体视图名相关信息user_update_columns:可查询到某视图的相关信息删除视图:drop view viewName,虽然视图是数据字典中的独立对象,但是视图是基表的一个查询定义,故删除视图不会导致基表数据丢失
序列
序列是用来生成唯一数字值的数据库对象,有oracle程序按递增或递减的顺序自动生成,通常用来生成主键。序列是独立的数据库对象,和表是对立对象,并不依附于基表通常一个序列为一个表提供主键值,但也可为多个表提供
创建序列
create sequence sequenceName [start with i ] [increment by j ] [maxvalue m | nomaxvalue] [minvalue m | nominvalue] [cycle | nocycle] [cache p | nocache]序列第一个值是i,步进为j,j为负数,为递减,为正数表示递增m表示最大值,或最小值cycle表示递增到最大或递减到最小是否继续生产序列号,默认是nocyclecache,预设p个数据在缓存中,以提高生产序列的效率
用法
序列的两个伪劣:nextval:获取下个值。currval:获取序列当前值创建序列后必须先执行一次nextval,之后才能使用currval获取序列第一个值如:select seqName from dual;在执行 insert into tableName (col1,col2....) values (seqName.nextval, 值2.。。。)通过select seqName.currval from dual 查询当前序列值注意:多执行一次select seqName from dual;则浪费一个序列值,而currval则不会导致序列的递增。删除序列:drop sequence seqName;
索引
索引是运行直接访问数据表某一行数据的树型结构,为提高查询效率引入,独立于表的对象,可存放在与表不同结构的表空间索引记录中存在索引关键字和指向表中数据的指针(地址)对索引进行I/O操作比对表操作要少一些索引一旦被创建就被oracle系统自动维护,查询语句不用指定使用哪个索引【自动查找产检的索引列】1:创建索引:create [unique] index indexName on table [col1,col2...]unique:表示唯一索引复合索引:基于多个列的索引,也叫多列索引当对基表做查询时,会自动应用索引。2:修改索引:alert index indexName rebuild;如果经常在索引列上进行DML操作,需要定期重建索引,提高索引的空间利用率3:删除索引:drop index indexName当有不合理的索引,会导致索引性能下降,删除索引
合理创建索引
经常出现在weher子句中的列经常出现在order by、distinct。如果是复合索引,在字段顺序要和关键子后面的字段顺序一致经常昨晚表的连接条件的列不要在经常多DML操作的表上建立不要在小表上建立限制索引数目,不是越多越好删除很少使用的,不合理的索引
约束
not null:非空约束unique:唯一约束primary key:主键约束foreign key:外键约束check:检查约束
创建约束的方法:
非空约束:列级约束:在字段后加 not null,表级约束:在列上加(列 类型 constraint 表_列_nn not null)添加非空约束:alter table 表 modify (列 类型 not null);删除非空约束:alter table 表 modify (列 类型 null);唯一约束:列级唯一:字段后见 unique,表级约束:最后加(constraint 表_列_uk unique(列))添加唯一约束:alter table 表 add constraint 表_列_uk unique(列)删除唯一约束:在列上加primary key添加主键约束:alter table 表 add constraint 表_列_pk primary key (列)外键约束:在子表上加外键约束,是在表创建后添加条件外键约束:alter table 子表 add constraint 子表_父表_fk foreign key (子表列) references 父表(父表列)检查约束:在创建表后添加添加查查约束:alter table 表 add constraint 表_列_check check(列>值):表示列的值必须大于值才能进行DML操作
注意:
1:主键约束的主键应该对系统毫无意义并唯一2:主键不应包含动态变化的数据,如时间戳3:主键并应认为干扰,并尽量建在单列上4:外键约束是在两个表的字段上5:外键上的值必须能在主表中选取,但从表的列在主表上存在,则主表的改行记录不允许被删除6:当一个有外键的表频繁做DML操作时,都会导致数据库自动对外键所关联的主表做检查,产生相应的开销,如果在逻辑中做了相应逻辑控制,则这些判断可以省去7:关联不一定需要外键,可以用程序或触发器控制8:新增或更改数据时,数据必须满足check约束中定义的条件
阅读全文
0 0
- 索引、序列、视图
- 索引视图序列
- 视图、序列、索引、同义词
- Oracle,视图,序列,索引
- 序列、视图、索引-阎明杰
- 视图、序列、索引
- 视图、序列、索引 、约束
- SQL视图、序列、索引
- 7、视图、序列、同义词、索引
- Oracle--视图,序列及索引
- Oracle视图、序列、索引、约束
- Oracle--视图,序列及索引
- Oracle视图,序列,索引,约束
- day20 分页查询 事务 序列 索引 视图
- 约束、视图、序列、伪列和索引
- oracle 同义词、序列、视图、索引
- 【Oracle】第三章索引视图序列
- oracle中序列 视图 索引 的 使用
- ArcGIS10:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS
- Linux CentOS查看版本的命令
- 干货集中营 API 文档
- 不固定参数求和,arguments
- C++ 继承的构造与析构
- 视图、序列、索引
- NGUI学习笔记(二):UIWrapCotent实现循环滚动(优化排行榜等效果)
- JVM 类装载原理分析-ClassLoader原理分析
- ubuntu/var/log/下各个日志文件
- spring中的BeanFactory与ApplicationContext的作用和区别?
- 数据库-锁
- POJ 2598 Match Throwing Game 笔记
- 问题
- 计算机的原码、反码和补码详解