专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » 历史回顾:Oracle数据库表和视图 »正文

历史回顾:Oracle数据库表和视图

来源: 发布时间:星期四, 2009年2月5日 浏览:2次 评论:0
="t18">
  Oracle数据库数据对象中最基本是表和视图其他还有约束、序列、、存储过程、包、触发器等对数据库操作可以基本归结为对数据对象操作,理解和把握Oracle数据库对象是学习Oracle捷径
  
  表和视图
  
  Oracle中表是数据存储基本结构ORACLE8引入了分区表和对象表ORACLE8i引入了临时表使表功能更强大视图是个或多个表中数据逻辑表达式本文我们将讨论怎样创建和治理简单表和视图
  
  治理表
  
  表可以看作有行和列电子数据表表是关系数据库中种拥有数据结构用CREATE TABLE语句建立表在建立表同时必须定义表名以及列数据类型和大小例如:
  
  CREATE TABLE prodUCts
  
  ( PROD_ID NUMBER(4),
  
  PROD_NAME VAECHAR2(20),
  
  STOCK_QTY NUMBER(5,3)
  
  );
  
  这样我们就建立了个名为products 要害词CREATE TABLE后紧跟表名然后定义了 3列同时规定了列数据类型和大小
  
  在创建表同时你可以规定表完整性约束也可以规定列完整性约束在列上普通约束是NOT NULL,有关约束讨论我们在以后进行
  
  在建立或更改表时可以给表个缺省值缺省值是在增加行时增加数据行中某项值为null时oracle即认为该值为缺省值
  
  下列数据字典视图提供表和表信息:
  
  . DBA_TABLES
  
  . DBA_ALL_TABLES
  
  . USER_TABLES
  
  . USER_ALL_TABLES
  
  . ALL_TABLES
  
  . ALL_ALL_TABLES
  
  . DBA_TAB_COLUMNS
  
  . USER_TAB_COLUMNS
  
  . ALL_TAB_COLUMNS
  
  表命名规则
  
  表名标识个表所以应尽可能在表名中描述表oracle中表名或列名最长可以达30个表名应该以字母开始可以在表名中包含数字、下划线、#、$等
  
  从其它表中建立表
  
  可以使用查询从基于个或多个表中建立表数据类型和大小有查询结果决定建立这种形式查询可以选择其他表中所有列或者只选择部分列在CREATE TABLE语句中使用要害字AS例如:
  
  SQL>CREATE TABLE emp AS SELECT * FROM employee
  
  TABLE CREATED
  
  SQL> CREATE TABLE Y AS SELECT * FROM X WHERE no=2
  
  需要注重是假如查询涉及LONG数据类型那么CREATE TABLE....AS SELECT....将不会工作
  
  更改表定义
  
  在建立表后有时候我们可能需要修改表比如更改列定义更改缺省值增加新列删除列等等ORACLE使用ALTER TABLE语句来更改表定义
  
  1、增加列
  
  语法:
  
  ALTER TABLE [schema.] table_name ADD column_definition
  
  例:
  
  ALTER TABLE orders ADD order_date DATE;
  
  TABLE ALTER
  
  对于已经存在数据行新列值将是NULL.
  
  2、更改列
  
  语法:
  
  ALTER TABLE [schema.] table_name MODIFY column_name _attributes;
  
  例:
  
  ALTER TABLE orders MODITY (quantity number(10,3),status varchar2(15));
  
  这个例子中我们修改了表orders将STATUS列长度增加到15,将QUANTITY列减小到10,3;
  
  修改列规则如下:
  
  . 可以增加串数据类型长度数字数据类型列精度
  
  . 减少列长度时该列应该不包含任何值所有数据行都为NULL.
  
  . 改变数据类型时该列值必须是NULL.
  
  . 对于十进制数字可以增加或减少但不能降低他精度
  
  3、删除数据列
  
  优化ORACLE数据库思路方法是删除列重新建立数据库在ORACLE8i中有很多思路方法删除列你可以删除未用数据列或者可以标示该列为未用数据列然后删除

  
  删除数据列语法是:
  
  ALTER TABLE [schema.] table_name DROP {COLUM column_names (column_names)}[CASCADE CONSTRAINS]
  
  要注重是在删除列时有关该列索引和完整性约束也同时删除注重要害字CASCADE CONSTRAINS假如删除列是多列约束部分那么这个约束条件相对于其他列也同时删除
  
  假如用户担心在大型数据库中删除列要花太多时间可以先将他们标记为未用数据列标记未用数据列语法如下:
  
  ALTER TABLE [schema.] table_name SET UNUSED {COLUM column_names (column_names)}[CASCADE CONSTRAINS]
  
  这个语句将个或多个数据列标记为未用数据列但并不删除数据列中数据也不释放占用磁盘空间但是未用数据列在视图和数据字典中并不显示并且该数据列名称将被删除数据列可以使用这个名称基于该数据列索引、约束统计等都将被删除
  
  删除未用数据列语句是:
  
  ALTER TABLE [schema.] table_name DROP {UNUSED COLUM COLUMN CONTINUE}
  
  删除表和更改表名
  
  删除表非常简单但它是个不可逆转行为
  
  语法:
  
  DROP TABLE [schema.] table_name [CASCADE CONSTRAINTS]
  
  删除表后表上索引、触发器、权限、完整性约束也同时删除ORACLE不能删除视图或其他单元但oracle将标示他们无效假如删除表涉及引用主键或唯要害字完整性约束时那么DROP TABLE语句就必须包含CASCADE CONSTRAINTS子串
  
  更改表名
  
  RENAME命令用于给表和其他数据库对象改名ORACLE系统自动将基于旧表完整性约束、索引、权限转移到新表中ORACLE同时使所有基于旧表数据库对象比如视图、为不合法
  
  语法:
  
  RENAME old_name TO _name;
  
  例:
  
  SQL> RENAME orders TO purchase_orders;
  
  TABLE RENAMED
  
  截短表
  
  TRUNCATE命令和DROP命令相似 但他不是删除整个数据表所以索引、完整性约束、触发器、权限等都不会被删除缺省情况下将释放部分表和视图空间假如用户不希望释放表空间TRUNCATE语句中要包含REUSE STORAGE子串TRUNCATE命令语法如下:
  
  TRUNCATE {TABLECLUSTER} [schema.] name {DROPREUSE STORAGE}
  
  例:
  
  SQL> TRUNCATE TABLE t1;
  
  TABLE truncate.
  
  治理视图
  
  视图是个或多个表中数据简化描述用户可以将视图看成个存储查询(stored query)或个虚拟表(virtual table).查询仅仅存储在oracle数据字典中实际数据没有存放在任何其它地方所以建立视图不用消耗其他空间视图也可以隐藏复杂查询比如多表查询但用户只能看见视图视图可以有和他所基于表列名区别列名用户可以建立限制其他用户访问视图
  
  建立视图
  
  CREATE VIEW命令创建视图定义视图查询可以建立在个或多个表或其他视图上查询不能有FOR UPDATE子串在早期ORACLE8i版本中不支持ORDER BY子串现在版本中CREATE VIEW可以拥有ORDER BY子串
  
  例:
  
  SQL> CREATE VIEW TOP_EMP AS
  
  SELECT empno EMPLOYEE_ID,ename EMPLOYEE_NAME,salary
  
  FROM emp
  
  WHERE salary >2000
  
  用户可以在创建视图同时更改列名思路方法是在视图名后立即加上要命名列名重新定义视图需要包含OR REPLACE子串
  
  SQL> CREATE VIEW TOP_EMP
  
  (EMPLOYEE_IDEMPLOYEE_NAMESALARY) AS
  
  SELECT empno ,ename ,salary
  
  FROM emp
  
  WHERE salary >2000
  
  假如在创建视图包含在正常情况下视图将不会被创建但假如你需要创建个带视图必须在CREATE VIEW语句中带上FORCE选项如:
  
  CREATE FORCE VIEW ORDER_STATUS AS
  
  SELECT * FROM PURCHASE_ORDERS
  
  WHERE STATUS='APPPOVE';
  
  SQL>/
  
  warning :View create with compilation errors
  
  这样将创建了个名为ORDER_STATUS视图但这样视图状态是不合法假如以后状态发生变化则可以重新编译其状态也变成合法
  
  从视图中获得数据
  
  从视图中获得数据和从表中获得数据基本用户可以在连接和子查询中使用视图也可以使用SQL以及所有SELECT语句字串
  
  插入、更新、删除数据
  
  用户在限制条件下可以通过视图更新、插入、删除数据
假如视图连接多个表那么在个时间里只能更新个表所有能被更新列可以在数据字典USER_UPDATETABLE_COLUMNS中查到
  
  用户在CREATE VIEW中可以使用了WITH子串WITH READ ONLY子串表示创建视图是个只读视图不能进行更新、插入、删除操作WITH CHECK OPTION表示可以进行插入和更新操作但应该满足WHERE子串条件这个条件就是创建视图WHERE子句条件比如在上面例子中用户创建了个视图TOP_EMP,在这个视图中
标签:

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: