表和视图

  管理表

  表可以看作有行和列的电子数据表,表是关系数据库中一种拥有数据的结构。用CREATE TABLE语句建立表,在建立表的同时,必须定义表名,列,以及列的数据类型和大小。例如:

CREATE TABLE products
  ( PROD_ID NUMBER(4),
   PROD_NAME VAECHAR2(20),
   STOCK_QTY NUMBER(5,3)
  );

  这样我们就建立了一个名为products的表, 关键词CREATE TABLE后紧跟的表名,然后定义了三列,同时规定了列的数据类型和大小。

  在创建表的同时你可以规定表的完整性约束,也可以规定列的完整性约束,在列上普通的约束是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 new_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}

临时视图都是在关系型数据库中使用的概念,但它们之间有着明显的区别。 1. 定义方式不同 临时是基于数据的定义方式,需要先创建结构,再往中插入数据。而视图则是基于查询语句的定义方式,只需要定义一个查询语句,就可以将查询结果作为一张虚拟的存在。 2. 存储方式不同 临时是在数据库中以独立的物理形式存储,数据存储在磁盘上,可以通过SQL语句直接访问和修改。而视图并不存储数据,只是将查询语句的结果作为一个虚拟的存在,每次查询视图时都会重新计算查询语句,因此查询视图的效率通常比查询要低。 3. 作用范围不同 临时通常只在当前会话中有效,当会话结束后,临时将会被删除。而视图的作用范围则可以跨越多个会话和用户,视图只要不被删除,就可以一直存在。 4. 数据更新方式不同 临时可以直接执行增删改查操作,对数据进行修改,而视图只能进行查询操作,无法对视图进行修改。 5. 数据可见性不同 临时的数据只能在创建该的会话中可见,其他会话无法访问。而视图可以被其他会话和用户访问,但是只能访问视图中定义的数据,无法访问视图中不存在的数据。 综上所述,临时视图有着不同的定义方式、存储方式、作用范围、数据更新方式和数据可见性。在实际应用中,需要根据具体的需求选择不同的方式来进行数据处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值