oracle创建简单的表

来源:互联网 发布:人类曾经被毁灭 知乎 编辑:程序博客网 时间:2024/06/05 03:08

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就会失败。也可能删除在为其他表而定义的外键约束中引用的表。首先必须删除这个表(或者这个约束)