数据定义语言 (Data Definition Language, DDL) 是SQL语言集中负责数据结构定义与数据库对象定义的语言,由CREATE、ALTER与DROP三个语法所组成。数据库对象包括表、视图、索引、同义词、序列等(TABLE/VIEW/INDEX/SYN/SEQUENCE)。我们先对创建和管理表和视图进行一个介绍。
一、创建和管理表
数据表是数据库中一个非常重要的对象,是其他对象的基础。可分为用户表和数据字典两类。
1、创建表(CREATE TABLE)
CREATE TABLE 语句创建表
CREATE TABLE table --table:表名 column:列名 (column datatype --列的数据类型和长度 [DEFAULT expr] --指定默认值,防止插入时输入空值到列中 [,...]);
最为常见的数据类型有三种,分别为字符型,数值型,日期型。
| 数据类型 | 说明 |
| VARCHAR2(size) | 可变长度字符数据(必须指定最大字符数:最小字符数是 1;最大字符数是 4000) |
| CHAR [(size)] | 固定长度字符数据,长度的大小以字节为单位(默认和最小字符数为 1;最大字符数为 2000) |
| NUMBER [(p,s)] | 数字,精度为p,小数为s (p是数字总长度,s是小数点右边的数字长度;p的范围从1到38,s的范围从-84到127) |
| DATE | 日期和时间值,从公元前4712.1.1到公元9999.12.31 |
用子查询语法创建表(CTAS)
CREATE TABLE table [(column, column...)] AS subquery --使用子查询
如果给出了指定的列,列的数目必须等于子查询的SELECT列表的列数目。如果没有给出了指定的列,表的列名应和子查询中的列名是相同的。完整性规则不会被传递到新表中,仅列的数据类型被定义。
2、修改表(ALTER TABLE)
ALTER TABLE table ADD (column datatype [DEFAULT expr][,column datatype]...); --添加列
ALTER TABLE table MODIFY (column datatype [DEFAULT expr][,column datatype]...); --修改列
ALTER TABLE table DROP (column); --删除列
ALTER TABLE table SET UNUSED (column); --隐藏列
ALTER TABLE table DROP UNUSED COLUMNS; --删除隐藏的列
添加列时不能指定新添加的列出的位置,新列将成为最后一列;修改列时可以修改数据类型大小和默认值,当列中只包含空值时才能减少一个列的宽度和改变数据类型,对默认值的改变仅改变影响以后插入的列;删除列时一次只能有一列被删除。表被修改后必须至少保留一列。一旦一列被删除,它不能再恢复;当一列从表中被删除时,该表中任何其他的被用SET UNUSED选项标记列也被删除,设置UNUSED的作用是为了在cpu、内存等资源不充足的时候,先做上UNUSED标记再等数据库资源空闲的时候用DROP UNUSED COLUMNS删除。
3、删除表(DROP TABLE)
DROP TABLE table [PURGE];
当你删除一个表时,数据库丢失表中所有的数据,并且所有与其相关的索引也被删除,任何视图和同义词被保留但无效。ORACLE 10g中由于引入了回收站,因此要彻底删除一个表需要加PURGE关键字。
4、截断表(TRUNCATE TABLE)
TRUNCATE TABLE table;
截断表用于从表中删除所有的行,并且释放该表所使用的存储空间。DELETE语句也可以从表中删除所有的行,但它不能释放存储空间。TRUNCATE命令更快一些,原因如下:TRUNCATE语句是数据定义 (DDL) 语句,不产生回滚信息;截断一个表不触发表的删除触发器。
----CREATE TABLE 语句创建表 CREATE TABLE emp_copy (empno number(4), ename varchar2(10), job varchar2(9), mgr number(4), hiredate date, sal number(7,2), comm number(7,2) DEFAULT null, deptno number(2)); ----用子查询语法创建表 CREATE TABLE emp_copy1 AS SELECT * FROM emp; ----修改表 ALTER TABLE emp_copy1 ADD (salgrade number(2)); ALTER TABLE emp_copy1 MODIFY (salgrade varchar2(2)); ALTER TABLE emp_copy1 DROP (salgrade); ALTER TABLE emp_copy1 SET UNUSED (comm); ALTER TABLE emp_copy1 DROP UNUSED COLUMNS; ----删除表 DROP TABLE emp_copy PURGE; ----截断表 TRUNCATE TABLE emp_copy1;