您的位置:首页 > 数据库 > Oracle

Oracle DDL

2016-05-23 00:00 246 查看
DDL是“数据定义语言”( Data Defination Language )的缩写,它包含CREATEALTERDROPRENAMETRUNCATE等命令,用来对数据库对象进行创建、修改、删除、重命名等操作。
其中CREATE 、ALTER和DROP命令的功能十分强大,几乎可以对所有的数据库对象进行管理,例如表、视图、索引、存储程序等。

表的创建

CREATE命令可用来创建表。

创建表时要确定表的结构,即确定表中各列的名字和类型。
在关系数据库中,表被看做是一个关系,表中的每个列是关系中的属性,是一个不可再分割的基本单位。
表中的行对应关系中的一个元组。

表的结构确定下来以后,就可以通过INSERT语句向表中插入数据了。
用来创建表的CREATE命令格式为:

CREATE TABLE 表名称(

列 l 数据类型,
列 2 数据类型,
..

);

表名是代表这个数据库对象的名称,对表名的要求是必须以字母开头,长度为l ~ 30个字符,而且只能包含A ~ Z 、a ~ z 、0 ~ 9 、一、$和#等字符,不能使用Oracle 的保留字,在同一个用户模式中不能拥有两个同名的表。

表中的每个列都有一个名字,在同一个表中不能有同名的列。

列的数据类型可以是系统预定义的类型,也可以是用户自定义类型。

数据类型描述
VARCHAR2(n) (可变长度的字符串.最大长度可达4000KB)
CHAR ( n) (固定长度的字符串,最大长度可达2000KB)
NUMBER (浮点类型的数据)
NUMBER ( m.n) (可表示整数和小数, m和n 分别为精度和1 小数位数)
DATE (日期型数据)
LONG (可变长度的字符串,最大长度可达2GKB)
RAWLONG RAW (存储二进制数据可变长度字符串
LOB 大对象类型 (存储大型的无结构的数据,如图形图像文本等数据,最大可达4GKB)

在创建表时,可以通过DEFAULT关键字为列指定一个默认值,这样当用INSERT语句插入一行时,如果没有为该列指定值,就以默认值填充,而不是插入空值。

如果要验证表的结构是否与期望的结果一致,可以在表创建之后通过DESC命令查看表的结构。
这个命令只能列出表中各列的列名数据类型以及是否为空等属性。

在创建表时,还可以以另一个表为模板确定当前表的结构。一般情况下,可以从一个表复制它的结构,从而快速创建一个表。
复制表的结构是通过子查询来实现的,即在CREATE语句中可以嵌套SELECT语句。这时的CREATE语句格式为:

CREATE TABLE 表名称 AS SELECT 语句;

CREATE语句将根据SELECT子句中指定的列,确定当前表的结构,然后将子查询返回的数据插入到当前表中,这样在创建表的同时向表中插入了若干行。

一般情况下,在通过这种方式创建的表中,列名和列的定义与原来的表一致。

如果希望在创建一个新表时指定与原来的表不同的列名,可以在CREATE语句中的表名之后指定新的列名。
如果只希望拷贝表的结构,而不复制表中的数据,可以将SELECT子句中的条件指定为一个永远为假的条件。

实际上,创建表的语句是非常复杂的,在表上可以定义约束,可以指定存储参数等属性。

在这里,顺便向读者介绍两个概念,一个是模式( Schema ),一个是数据字典( Datadictionary )。
模式指的是一个用户所拥有的所有数据库对象的逻辑集合。

在创建一个新用户时,同时创建了一个同名的模式,这个用户创建的所有数据库对象都位于这个模式中。
用户在自己的模式中创建表,需要具有CREATE TABLE 系统权限,如果需要在别人的模式中创建表,则需要具有CREATE ANY TABLE权限。
在访问其他用户的数据库对象时,要指定对方的模式名称,例如,通过SCOTT.EMP 引用SCOTT用户的emp表。

数据字典是一些视图,从这些视图中可以查看一些重要的系统数据,如数据库中的表、索引、权限、表空间等信息。
这些视图是在创建数据库时自动创建的,它们的内容也是由数据库服务器自动维护的。
用户可以查看以下几种形式的数据字典视图:
·以USER_开始的视图,
·以ALL_开始的视图,
.以DBA_开始的视图。
从USER_视图中可以查看当前用户所创建某类数据库对象,如在USER_TABLES 中可以查看当前用户所创建的任何一个表的信息。
从ALL_视图中可以查看当前用户有权限访问的某类数据库对象,如在ALL_TABLES 中可以查看当前用户有权限的任何一个表的信息。
在DBA视图中可以查看当前数据库中所有的某类对象的信息,如在DBA TABLES 中可以查看当前数据库中所有的表。
DBA_视图只能由数据库管理员(一般是SYS 用户)查看。

如何修改表的结构

表在创建以后,如果在使用的过程中发现表的结构不合理,可以通过执行ALTER命令修改它的结构。
修改表结构的操作包括增加列、修改某个列的定义、删除列、增加约束修改约束
表的重命名等。
ALTER命令可以使用若干个子句,通过这些子句可以完成修改表结构的操作。

可以使用的子句包括ADDDROPMODIFYRENAME等。

如果要在表中增加一个列,通过ADD子句指定一个列的定义,至少要包括列名和列的数据类型。
增加列的语句结构为:
ALTER TABLE 表名
ADD (列 1 ,数据类型,
列 2, 数据类型,
. . . ) ;

需要注意的是,如果一个表中已经有数据,这时增加一个列时,不能将该列约束为“非空(NOT NULL )”,因为我们不能一方面要求该列必须有数据,而另一方面又无法在增加列的同时向该列插入数据。

也就是说,要往一个表中增加一个非空列时,这个表必须是空的。

如果表中已经有数据,单独使用“NOT NULL”约束是不行的。
一种好的解决办法是为该列指定默认值,这样在增加一个非空列的同时,为这个列填充了指定的默认值。
ALTER TABLE 表名称 ADD 列名称 数据类型 DEFAULT 默认值 NOT NULL;

利用ALTER语句还可以从表中删除一个列。

用来完成这个操作的子句是DROP 。

用于删除列的ALTER语句格式为:

ALTER TABLE 表名称 DROP COLUMN 列名称;

一个列时,这个列将从表的结构中消失,这个列的所有数据也将从表中被删除。

原则上可以删除任何列,但是一个列如果作为表的主键,而且另一个表已经通过外键在两个表之间建立了关联关系,这样的列是不能被删除的。

注:此时可以通过删除外键约束,这样就可以删除主键列;亦或者可以通过删除主键约束,在删除主键约束时要加上关键字CASCADE。

一旦主键约束被删除了,外键约束也就被存在了,因为外键是依赖于主键列的。

如果要修改表中一个列的定义,可以使用ALTER语句的MODIFY 子句。

通过MODIFY 子句可以修改列的长度、非空、数据类型等属性。

注:MDOIFY子句修改列属性要根据表中已有数据来决定能否修改。
使用了MODIFY子句的ALTER语句格式为:

ALTER TABLE 表名称 MODIFY 列名称;

需要注意的是,如果表中目前没有数据,那么可以将一个列的长度增加或减小,也可以将一个列指定为非空。
如果表中已经有数据,那么可以增加列的长度,但在减少列的长度时,可能会因为列长度小于列的最大值而不允许修改;如果该列有空值,不能将该列指定为非空。

通过ALTER语句,还可以为表进行重命名,也就是将表的名字改为另一个名字。

为表重命名的ALTER语句格式为:

ALTER TABLE 表名称 RENAME TO 新表名称;

其他的DDL命令

除了CREATE和ALTER两条主要的命令外, DDL还包括DROP 、RENAME和TRUNCATE等几条命令。
其中DROP命令的功能是删除一个对象,通过这条命令几乎可以删除任何类型的数据库对象。
用来删除表的DROP命令的格式为:

DROP TABLE 表名称;

数据库对象删除后,它的有关信息就从相关的数据字典中删除。
RENAME命令的作用是对数据库对象重新命名。

对表进行重新命名的命令格式为:

RENAME 原表名称 TO 新表名称;

表被重新命名以后,它的信息就会在相关的数据字典中更新。

TRUNCATE命令的作用是删除表中的数据。

与DELETE语句不同的是, TRUNCATE命令将删除表中的所有数据,不需要指定任何条件,而且数据被删除后无法再恢复。
这条命令的语法格式为:

TRANCATE TABLE 表名称;

TRUNCATE命令作用的结果是删除所有的数据,而且不可恢复,所以这条命令要慎用。

从执行结果来看,一条TRUNCATE语句相当于下列两条语句的组合:

DELETE FROM 表名称;

COMMIT;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: