表的创建与修改等简单操作

创建表
1、创建表的语句和例子
我们用CREATE TABLE 语句来创建表。该语句为数据库定义语言(DDL-Data Definition Language)。
格式:
CREATE TABLE [用户名.]表名
(列名 数据类型 [DEFAULT 默认值][,...]);
例子:
CREATE TABLE product
(p_code NUMBER(6),
p_name VARCHAR2(30),
p_desc VARCHAR2(100),
p_price NUMBER(5,2));
2、命名和引用规则
Oracle数据库中的表和列名是以引文字母开头的字母数字序列,其命名遵循如下的规则:
必须以英文字母开头,之后跟大写或小写英文字母,或数字字符,或#,或$,或_
名字的长度最短为1个字母,最长为30个字符
一定不能与Oracle数据库系统的保留关键字相同
表明一定不能与同一用户下的任何其他的对象相同,但是同一用户胡同表的列名可以相同
3、列的数据类型和默认值
在Oracle数据库中经常使用的数字类型有以下4种
VARCHAR2(size):变长字符型数据
其中:size为该列最多可容纳的字符个数。size必须定义。它的默认值和最小值均为1,最大值为4000
CHAR(size):定长字符串数据
其中:size为该列最多可容纳的字符个数。它的默认值和最小值均为1,最大值为2000
DATE:日期型数据
其中:日期和事件的取值范围是从公元前1471年1月1日到公园9999年12月31日
NUMBER(p,s):数字型数据
其中:p为十进制的总长度(位数),s为十进制小数点后面的位数。p的最小值为1,最大值为38,s的最小值为-84,最大值为124
可变长与不可变长的区别展示:
如果您定义了表中的某一列为变长字符型数据(VARCHAR2),那么当您插入或修改该列时Oracle只把世纪的字符存入数据库中。例如procudt中的定义:p_desc VARCHAR2(100),如果您向该列输入数据时输入的为‘NEW’只为3个字符,Oracle实际上只会把‘NEW’这3个字符存入到数据库中。所以使用变长字符型数据(VARCHAR2)会节省空间。如果您定义了表中的某一列为定长字符型数据(CHAR),那么当您插入或修改该列时,Oracle存入数据库中的字符数是由size所定义的,没有数据的部分由Oracle填上空格。
一般来讲,变长字符型数据(VARCHAR2)节省空间,但Oracle处理的速度可能较慢,而定长字符串数据(CHAR)会浪费一些空间,但Oracke处理它的速度可能快一些。
为了处理多媒体对象(LOB-Large Object),Oracle提供了如下的LOB数据类型
CLOB数据类型(Character Large Object):用于在数据库中存储单字节的大数据对象,如讲演稿或者简历等。
BLOB数据类型(Binary Large Object):用于在数据库中存储大的二进制对象,如照片或者幻灯片等
BFLE数据类型(Binary File):用于在数据库外的操作系统文件中存储大的二进制对象,如电影胶片等。BFILE类型是外部数据类型,因此定义为BFILE数据类型的列数不能通过Oracle的数据命令来操作的,只能通过操作系统或者第三方软件来维护
RAW数据类型:在数据库中直接存储二进制手。此类型的数据占用的存储空间小,执行效率也高。但在网络环境中不同的计算机上传输资料时,Oracle服务器是不进行任何的字符集转换的。
为了和以前的Oracle版本兼容,Oracle继续支持LONG和LONG RAW数据类型。
LONG和LONG RAW数据类型:主要用于在Oracle8以前数据库中存储无结构的数据。如二进制图像

4、利用子查询来创建表
例子:
CREATE TABLE user_small
AS
SELECT USER_ID,NAME_CN AS "name",MOB_BELONG_TO AS "ADDRESS"
FROM USER_BASE_INFO;
利用子查询来创建的语法格式如下:
CREATE TABLE 表名
[(列名,列名...)]
AS 子查询;
使用子查询来创建表时需要注意如下事项:
Oracle使用您所指定的列和表名来创建表,所有的行是由子查询得到的,并插入到该表中
所说明的列名的个数一定要和子查询列的个数相同
所说明的每一列的数据类型必须与子查询的每一列的数据类型相匹配
所说明的列必须符合列的命名规则
如果没有给出列名,列名与子查询中的列名相同,而且列的个数和子查询列的个数也相同
5、修改表的结构
1)、在一个表中加入一个新的列,格式如下:
ALTER TABLE 表名
ADD (列名 数据类型 [DEFAULT 表达式] [,列名 数据类型]...)
您没有办法指定您所加入的列的位置,新的列永远为最后一行
例子:
ALTER TABLE user_small
ADD (mobile CHAR(11));
2)、修改一个表中已经存在的列,其格式如下:
ALTER TABLE 表名
MODIFY (列名 数据类型 [DEFAULT 表达式][,列名 数据类型] ...)
修改一个表中已存在的列要注意以下的事项:
可以增加字符类型的列的宽度
可以增加数字类型的列的宽度和精度
只有当所有列的值都为空或者表中没有数据时,才可以减少列的宽度
只有当所有的列的值都为空的时候,才可以改变某一列的数据类型
如果改变某一列的默认值,该默认值只影响以后的操作
只有当某一列的值为空或者没有改变该列大小的情况下,才可以把CHAR类型的列改变成VARCHAR2类型的列或者把VARCHAR2类型的列改变成CHAR类型的列
例子:
ALTER TABLE user_small
MODIFY (mobile VARCHAR(11));
3)、从一个表中删除一列,其格式如下:
ALTER TABLE 表名
DROP COLUMN 列名;
删除一个表中已经存在的列要注意一下的事项:
使用以上的ALTER TABLE 语句,一次只能删除一列
在使用以上的ALTER TABLE语句删除了一列之后,该表中至少还要有一列
因为ALTER TABLE 是DDL语句,所以删除的列时无法被恢复的
所删除的列可以包含数据也可以不包含数据
例子:
ALTER TABLE user_small
DROP COLUMN mobile;
在一个表中删除一列,特别是在一个大表中删除一列是相当耗时的,对系统的效率冲击也很大。因此,应该尽量避免在数据库繁忙期间使用上述DDL语句,当您的数据库特别繁忙,老板要求立即删除某一个表中的一列,您应该如何处理呢?Oracle提供了一个折中的方式:就是在ALTER TABLE 语句中使用SET UNUSED子句
4)、将某一列置成无用
格式:
ALTER TABLE 表名
SET UNUSED(列名); 或
ALTER TABLE 表名
SET UNUSED COLUMN 列名;
当数据库空闲的时候,您再利用以下的DDL语句来删除已经设置为无用(UNUSED)的列。
ALTER TABLE 表名
DROP UNUSED COLUMNS
使用SET UNUSED把表中的一列设置为无用(UNUSED)要注意以下的事项:
该选项只能在Oracle8和以上的版本上使用
该选项只是将设置成无用(UNUSED)的列标上记号,并不真的删除这一列
在由该选项设置成无用(UNUSED)的列里,无法用SQL*PLUS命令或者SQL语句看到
Oracle把设置为无用(UNUSED)的列当做删除列处理
可以把一列也可以把多列设置成无用(UNUSED)
可以使用DROP (UNUSED)列名选项来删除被设置成无用(UNUSED)的列
因为该语句是一个DDL语句,所以没有恢复无用(UNUSED)列的命令

5)、改变对象的名字
什么是数据库中的对象?Oracle数据库中的对象时一个存储在Oracle数据库中的数据结构。
常用的对象有以下5种:
1)、表(Table):存储数据的基本单位,由行和列组成
2)、索引(Index):为了改进某些查询性能的数据结构
3)、视图(View):来自一个或多个表的数据子集
4)、序列(Sequence):数值生成器
5)、同义词(别名)(Synonym):赋予对象另外的名字
除了上面的之外还包括存储过程(Produce)、函数(Function)、触发器(Trigger)等对象
如果您创建某个对象时考虑不周,对象的名字不合适,您可以使用Oracle的RENAME语句来修改对象的名字:
RENAME语句的格式如下:
RENAME 对象原来的名字 to 对象现在的名字
注意:只有对象的主任才可以修改对象的名字
RENAME user_small to "user_sm";
SELECT * FROM "user_sm";
注意:引号的使用不要
6)、为表和列加注释
格式如下:
COMMENT ON TABLE 表名|COLUMN 表名.列名
IS ‘正文’;
例子:
COMMENT ON TABLE user_sm
IS '一个表';
COMMENT ON COLUMN user_sm.address
IS '名字';
通过SQL查看注释:
SELECT comments
FROM user_tab_comments
WHERE table_name = 'USER_SM';

SELECT comments
FROM user_col_comments
WHERE table_name = 'USER_SM'
AND column_name='ADDRESS';
Oracle没有提供删除注释的语句,但是您可以通过假如空串的方式来从数据库中删除一条注释。
COMMENT ON COLUMN user_sm.address
IS '';
7、截断表和删除表
当一个表中的数据已经不再需要的时候,可以使用TRUNCAT TABLE 语句将它们全部删除掉(截断)。该语句为DDL语句。
TRUNCAT TABLE 语句的格式如下:
TRUNCAT TABLE 表名;
TRUNCAT TABLE语句具有如下的特征:
1、他删除表中的所有数据行,但保留表的结构
2、如果没有备份的话,被删除的数据行无法恢复
3、该语句释放表所占用的磁盘空间
4、它并不触发表的删除触发器
如果您不但要删除表中的数据而且要删除表的结构,您应该使用DROP TABLE语句。该语句也为DDL语句
DROP TABLE语句的格式如下:
DROP TABLE 表名
DROP TABLE 语句有如下的特征:
1、它删除表中所有的数据行和表的结构
2、它也删除表的所有索引
3、如果没有备份的话,被删除的表无法恢复
4、它提交所有的挂起的事务
5、所有基于该表的视图和别名依然保留但已无效

posted @ 2017-01-09 12:55  guodaxia  阅读(185)  评论(0)    收藏  举报