1)使用规范创建表:
create table test(
empno number(4)
sal number(7,2)
);
2)从子查询创建表:
创建表定义,并使用一条语句就可以给表填充行。所有查询都可用作表结构和行的来源。
CREATE TABLE [schema.] table as subquery;
所有查询都是返回行的二维集合;这个结果保存为新的表。使用子查询创建表的示例:
create table employees_copy as select * fromemployees;
employees_copy 完全是employees表的副本。它们的定义和包含的行完全相同。所有非空值和列的检查约束也适合于新的表,但所有主键,唯一键或者外键约束则不适用。
要创建一个没有行的表,可以使用排除所有行的where子句。
create table no_emps as select * fromemployees where 1=2;
在创建之后变更表定义:
添加列:alter tableemp add(job_id number);
修改列:alter tableemp modify(comm number(4,2) default 0.05);
删除列:alter tbaleemp drop column comm;
将列标记为未使用:alter table emp set unused column job_id;
重命令列:alter tableemp rename column hiredate to recruited;
将表标记为只读:alter table emp read only;
所有这些变更都是包含内置COMMIT的DDL命令。因此它们是不可逆的。
删除列是一个耗时的过程。并且删除列之后,必须重新构建各行来删除列的数据。所有可以使用set unused命令使这些列不存在。然后等系统方便的时候在
ALTER TABLE tablename drop unused columns;这样一次通过表就会删除所有未使用的列。
DROP命令实际上不影响表:它是影响数据字典中的表,这些表定义表,它们不是只读的。
truncate table命令:它能够删除表的所有行,同时保持表定义不变。
drop table:删除表定义 drop table [schema.]tablename;
如果没有指定模式,这当前登录模式中的tablename的表就会被删除。
drop绝对不可逆。也有一些限制:如果会话有正在处理的事务,该事务包含表中的行,那么drop就会失败。也可能删除在为其他表而定义的外键约束中引用的表。首先必须删除这个表(或者这个约束)