第10章 创建表、序列、索引和视图
Alter table 还可以启用或禁用约束。
Alter table可以修改列,条件是该列的类型的长度可以修改,例如,CHAR或VARCHAR2。
ALTER TABLE ORDER_STATUS MODIFY STATUS VARCHAR2(15);
修改数据列的精度
ALTER TABLE ORDER_STATUS MODIFY id NUMBER(15);
修改列的数据类型
ALTER TABLE ORDER_STATUS MODIFY STATUS CHAR(15);
如果一个表中还没有任何行或列为空值,就可以将列修改为任何一种数据类型(包括更短的数据类型)。否则,就只能将列的数据类型修改为一种兼容的数据类型。
修改列的默认值
ALTER TABLE ORDER_STATUS MODIFY last_modified default -1;
添加列
ALTER TABLE ORDER_STATUS add last_modified integer;
删除列
ALTER TABLE ORDER_STATUS drop column last_modified ;
添加约束
CHECK 指定一列或一组列的值必须满足特定的约束。
CHECK 指定对视图执行的DML操作必须满足子查询的条件。
READ ONLY 指定视图是只读的
添加CHECK 约束
ALTER TABLE ORDER_STATUS ADD CONSTRAINT ORDER_STATUS_CK CHECK ( STATUS IN (‘PLACED’,‘PENDING’));
要添加一个约束,表中现有的所有行都必须满足这个约束条件。
添加NOT NULL约束使用modify而不是add constraint
Alter table order_status modify modified_by constraint order_status_nn not null;
Alter table order_status modify modified_by not null;此处并没有指定约束的名称。数据库会自动为约束分配一个名称,例如,SYS_C003304。
为约束起一个有意义的名字,这样在应用程序出现约束的错误时,,就可以容易判断问题所在。
添加外键FOREIGN KEY约束
ALTER TABLE ORDER_STATUS ADD CONSTRAINT ORDER_STATUS_FK s_column REFERENCE EMPLOYEE(EMPLOYEE_ID);
使用一个带有FOREIGN_KEY约束的 ON DELETE CASCADE 子句,可以指定在父表中删除一行记录时,子表中匹配的所有行也都被删除
ALTER TABLE ORDER_STATUS ADD CONSTRAINT ORDER_STATUS_FK s_column REFERENCE EMPLOYEE(EMPLOYEE_ID) ON DELETE CASCADE;
使用一个带有FOREIGN_KEY约束的 ON DELETE SET NULL子句,可以指定在父表中删除一行记录时,子表中匹配行的外键将被设置为空值。
ALTER TABLE ORDER_STATUS ADD CONSTRAINT ORDER_STATUS_FK s_column REFERENCE EMPLOYEE(EMPLOYEE_ID) ON DELETE SET NULL;
添加UNIQUE 约束
ALTER TABLE ORDER_STATUS ADD CONSTRAINT ORDER_STATUS_UN UNIQUE (status);
删除约束
ALTER TABLE ORDER_STATUS drop CONSTRAINT ORDER_STATUS_UN;
禁用约束
默认情况下,约束在创建时启用的。在创建约束时可以在CONSTRAINT子句的末尾添加DISABLE来禁用约束。
ALTER TABLE ORDER_STATUS ADD CONSTRAINT ORDER_STATUS_UN UNIQUE (status) DISABLE;
使用ALTER TABLE 的DISABLE CONSTRAINT 子句可以禁用现有约束。
ALTER TABLE order_status DISABLE CONSTRAINT ORDER_STATUS_UN;
在DISABLE CONSTRAINT 子句的末尾添加CASCADE可以禁用依赖于指定的完整性约束的任何完整性约束。
启用约束
使用ALTER TABLE的ENABLE CONSTRAINT 子句可以启用现有的约束。
ALTER TABLE ORDER_STATUS ENABLE CONSTRAINT ORDER_STATUS_UN;
注意:约束默认是ENABLE VALIDATE
延迟约束
Deferred constraint 是在事务被提交时强制执行的约束。在最初添加约束时可以使用DEFERRABLE 子句指定约束是延迟约束。约束一旦添加之后,就不能再修改为DEFERRABLE了;相反,只能先将其删除,在重新创建这个约束。
在添加DEFERRABLE 约束时,可以将其标识为INITIALLY IMMEDIATE 或INITIALLY DEFERRED。
INITIALLY IMMEDIATE 的意思是每次向表中添加数据,修改表的数据或从表中删除数据时都要检查这个约束(这与约束的默认行为相同)。INITIALLY DEFERRED的意思是只有在事务提交时,才会检查这个约束。
ALTER TABLE ORDER_STATUS ADD CONSTRAINT ORDER_STATUS_UN UNIQUE (status) DEFERRABLE INITIALLY DEFERRED;
通过查询user_contraints可以获得有关约束的信息。
重命名表
RENAME ORDER_STATUS TO NEW_STATUS;
向表添加注释
COMMENT ON TABLE order_status is ‘zhushi’;
向列添加注释
COMMENT ON TABLE order_status.status is ‘zhushi’;
获得表的注释
SELECT * FROM user_tab_comments where table_name=’’;
获得列的注释
SELECT * FROM user_col_comments where table_name=’’;
截断表
使用TRUNCATE 语句可以将表截断。这将删除表中所有的行,并重置表的存储空间
TRUNCATE TABLE tableName;
如果需要删除表中的所有行,而不是DELETE。这事因为TRUNCATE会重置表的存储空间,以准备接收新行。执行TRUNCATE 语句不需要在数据库中使用任何undo空间,也不要执行COMMIT命令使删除操作永久化。
序列
CREATE SEQUENCE sequence_name
[START WITH start_num]
[INCREMENT BY increment_num]
[{MAXVALUE maximum_num | NOMAXVALUE}]
[{MINVALUE minimum_num | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE cache_num |NOCHACHE}]
[{ORDER | NOORDER}];确保按照请求次序生成整数。在使用RAC时可以使用ORDER选项。
从user_sequences中可以获得有关序列的信息。
user_sequences是数据字典的一部分。
一个序列中包含两个“伪列”,分别是currval和nextval,可以分别用来获取该序列的当前值和下一个值。
在检索序列的当前值之前,必须通过检索序列的下一个值对序列进行初始化。在选择test.seq.nextval时,该序列就被初始化为1。
使用序列填充主键
CREATE table order_status2(
Id integer constraint order_status2_pk primary key,
Status varchar2(10));
Create sequence order_status2_seq nocache;
Insert into order_status2( id ,status) values( order_status2_seq.nextval,’PLACED’);
修改序列,可以修改的序列的内容如下限制:
不能修改序列的初值
序列的最小值不能大于当前值
序列的最大值不能小于当前值
删除序列
Drop sequence test_seq;
10.3索引
通常,在需要从包含很多行的表中检索少数几行时,都应该对列创建索引。有一条基本的准则是:
当任何单个查询要检索的行少于或等于整个表行数的10%时,索引就非常有用。
Oracle数据库会为表的主键以及包含在唯一约束中的列自动创建索引。
10.3.1创建索引
CREATE [UNIQUE] INDEX index_name ON
Table_name (column_name[,column_name …])
TABLESPACE tab_space;
UNIQUE指定索引列中的值必须是唯一的。
由于性能方面的原因,通常应该将索引与表存储到不同的表空间中。
使用唯一索引可以实现列值的唯一性。
10.3.2创建基于函数的索引
Create index customers_last_name _idx on customers(last_name);
假设执行下面这个查询:
Select first_name,last_name from customers where last_name=UPPER(‘pitt’);
由于这个查询使用了一个函数upper(),因此就不会使用索引,这就需要创建基于函数的索引。
Create index customers_last_name _func_idx on customers(UPPER(last_name));
另外,为了利用基于函数的索引,DBA必须将初始化参数QUERY_rewrite_ENABLED设置为TRUE(默认值是FALSE).例如:
CONNNET system/manager
ALTER SYSTEM SET QUERY_REWRITE_ENABLED=TRUE;
获取有关索引的信息
从user_indexes中可以获得有关索引的信息。
使用all_indexes可以获得有关所有可以访问的索引的信息。
从user_ind_columns中可以获得列索引的信息。
使用all_ind_columns可以获得有关所有可以访问的索引的信息。
10.4视图
视图中并不存储数据,它们只会访问基表中的行。
通过某些视图,也可以对基表进行DML操作。
视图具有以下优点:
限制用户只能通过视图检索数据。这样就可以对最终用户屏蔽创建视图所基于的底层基表。
可以将复杂查询编写为视图。这样就可以对最终用户屏蔽一定的复杂性。
限制某个视图只能访问基表中的部分特定数据。这样可以实现另外一层安全性,并且可以对最终用户屏蔽部分行。
10.4.1创建并使用视图
CREATA [OR REPLACE] VIEW [{FORCE|NOFORCE}] VIEW view_name
[(alias_name[,alias_name …])] as subquery
[WITH {CHECK OPTION | READ ONLY} CONSTRAINT constraint_name];
Force 说明即使基表不存在也要创建该视图
Alias_name为子查询中的表达式指定一个别名。别名的个数必须与子查询中表达式的个数相同。
Subquery指定一个子查询,它对基表进行检索。如果已经提供了别名,可以在SELECT子句之后的列表中使用别名。
WITH CHECK OPTION 说明只有子查询检索的行才能被插入、修改或删除。默认情况下,在插入、更新或删除行之前并不会检查这些行是否能被子查询检索。
constraint_name指定WITH CHECK OPTION 或READ ONLY 约束的名称。
WITH READ ONLY 说明只能对基表中的行进行只读访问
简单视图,包含一个子查询,它只从一个基表中检索数据。
复杂视图,包含一个子查询,它具有以下特点:
1从多个基表中检索数据
2.使用GROUP BY或DISTINCT子句对行进行分组
3.包含函数调用
注意:只能对简单视图执行DML操作;复杂视图不支持DML操作。
获取视图有关的信息
Describe view_name;
可以从 user_views和all_views 查询有关视图的信息。从user_constraints中可以获取有关视图约束的信息。
分享到:
相关推荐
第10章:多层次混合建模视图示例 第11章:缺少数据建模和贝叶斯估计视图示例 第12章:蒙特卡洛模拟研究查看示例 第13章:示例:特殊功能 第14章:特殊建模问题 第 15 章:标题、数据、变量和定义命令 第16章:...
视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。 还可以查询视图的全部信息和指定的数据行和列。 如:检索数据: SQL>SELECT * FROM dept_sum_vw; 查询视图定义: SELECT view_name,text ...
第10章:多层次混合建模视图示例 第11章:缺少数据建模和贝叶斯估计视图示例 第12章:蒙特卡洛模拟研究查看示例 第13章:示例:特殊功能 第14章:特殊建模问题 第 15 章:标题、数据、变量和定义命令 第16章:...
第10章:多层次混合建模视图示例 第11章:缺少数据建模和贝叶斯估计视图示例 第12章:蒙特卡洛模拟研究查看示例 第13章:示例:特殊功能 第14章:特殊建模问题 第 15 章:标题、数据、变量和定义命令 第16章:...
第10章:多层次混合建模视图示例 第11章:缺少数据建模和贝叶斯估计视图示例 第12章:蒙特卡洛模拟研究查看示例 第13章:示例:特殊功能 第14章:特殊建模问题 第 15 章:标题、数据、变量和定义命令 第16章:...
第10章:多层次混合建模视图示例 第11章:缺少数据建模和贝叶斯估计视图示例 第12章:蒙特卡洛模拟研究查看示例 第13章:示例:特殊功能 第14章:特殊建模问题 第 15 章:标题、数据、变量和定义命令 第16章:...
第10章:多层次混合建模视图示例 第11章:缺少数据建模和贝叶斯估计视图示例 第12章:蒙特卡洛模拟研究查看示例 第13章:示例:特殊功能 第14章:特殊建模问题 第 15 章:标题、数据、变量和定义命令 第16章:...
第10章:多层次混合建模视图示例 第11章:缺少数据建模和贝叶斯估计视图示例 第12章:蒙特卡洛模拟研究查看示例 第13章:示例:特殊功能 第14章:特殊建模问题 第 15 章:标题、数据、变量和定义命令 第16章:...
第10章:多层次混合建模视图示例 第11章:缺少数据建模和贝叶斯估计视图示例 第12章:蒙特卡洛模拟研究查看示例 第13章:示例:特殊功能 第14章:特殊建模问题 第 15 章:标题、数据、变量和定义命令 第16章:...
第10章:多层次混合建模视图示例 第11章:缺少数据建模和贝叶斯估计视图示例 第12章:蒙特卡洛模拟研究查看示例 第13章:示例:特殊功能 第14章:特殊建模问题 第 15 章:标题、数据、变量和定义命令 第16章:...
第一章:oracle体系结构 ORACLE 10G的卸载与安装 ...第十一章:分区表 概述 范围分区 HASH分区(散列分区) 列表分区 复合分区 分区表操作 分区表的管理 第十二章:数据库优化 概述 SQL的优化
第17章 创建和管理表、视图、索引、群集和序列 第18章 Oracle基本安全 第Ⅲ部分 高级内容 第19章 高级安全性—— 虚拟专用数据库 第20章 使用表空间 第21章 用SQL*Loader加载数据 第22章 使用Data Pump导入和导出 第...
Oracle10数据库电子教案 ...第6章 索引和视图 第7章 PL/SQL编程 第8章 存储过程和触发器 第9章 序列、同义词、程序包 第10章 Oracle数据库安全管理 第11章 数据库的备份与恢复 第12章 数据库应用系统开发
在实际应用中,视图经常与其他数据库对象结合使用,如表、约束、序列、索引和同义词。表是存储数据的基本单位,约束用于确保数据的完整性,序列生成唯一的数值,索引加速查询速度,同义词则为数据库对象提供别名,...
第十五章 视图 第十六章 索引 第十七章 序列、同义词 第十八章 PL SQL 第十九章 游标、函数 第二十章 存储过程 第二十一章 触发器 第二十二章 事务(数据库系统概论) 第二十三章 用户管理 第二十四章 备份 恢复 SQL...
第十五章 视图 第十六章 索引 第十七章 序列、同义词 第十八章 PL SQL 第十九章 游标、函数 第二十章 存储过程 第二十一章 触发器 第二十二章 事务(数据库系统概论) 第二十三章 用户管理 第二十四章 备份...
第十七章 序列、同义词 第十八章 PL SQL 第十九章 游标、函数 第二十章 存储过程 第二十一章 触发器 第二十二章 事务(数据库系统概论) 第二十三章 用户管理 第二十四章 备份 恢复 SQLLoader 第二...
第17章 创建和管理表、视图、索引、群集和序列 第18章 分区 . 第19章 oracle 基本安全 第ⅲ部分 高 级 主 题 第20章 高级安全性——虚拟专用数据库 第21章 高级安全性:透明数据加密 第22章 使用表空间 ...
第十七章 序列、同义词 第十八章 PL SQL 第十九章 游标、函数 第二十章 存储过程 第二十一章 触发器 第二十二章 事务(数据库系统概论) 第二十三章 用户管理 第二十四章 备份 恢复 SQLLoader 第二十五章 ...
第十七章 序列、同义词 第十八章 PL SQL. 第十九章 游标、函数 第二十章 存储过程 第二十一章 触发器 第二十二章 事务(数据库系统概论) 第二十三章 用户管理 第二十四章 备份 恢复 SQLLoader 第二十五章 数据库...