--查看表的结构
desc ygb;
select * from user_tab_columns
where table_name='YGB';
--新建表ygb
create table ygb(
bh number(3),
eid varchar2(6) constraint eid_p primary key,
ename varchar2(10),
bdate date,
sex char(1),
city varchar2(20)
);
JOHN@ test10g> create table tbstest
2 (id int,
3 dt date
4 )
5 tablespace tbs_test; --指定表存放的表空间
--通过查询新建表
create table emptest as
select * from emp;
如果此表有几百万行,并且你的时间不允许,那么还有两种方法可以提高创建含有大量数据的新表的速度。可以使用 parallel 和 nologging 选项来提高装载大表的速度。parallel 选项允许你用多个进程并行执行数据加载,并且 nologging 选项指示不要把该信息记录进重做日志文件和回滚段(除了为内务处理目的外)。如下所示:
create table employee_new
as select * from employees
parallel degree 4
nologging;
另一种方法是将一个表简单的从一个表空间移动到另一个表空间。
alter table employee move new_tablespace;
当移动一个表时,行的 rowid 改变了,因而使该表的索引不可用。你必须重新建立索引或者在你移动该表后重建它们。
--重命名表
alter table ygb rename to newname;
--删除表
drop table emp; --删除表
drop table emp purge; --删除表,不放到回收站
drop table emp cascade constraints; --将约束一起删除
truncate table emp; --截断表
--修改表的结构
alter table emp add (job_id number); --追加列
alter table emp modify (job_id number(4,0) default 1001); --修改列
alter table emp drop column job_id; --删除列
alter table emp drop (job_id);
alter table emp rename column job_id to jobid; --重命名列
income integer generated always as (salary+jiangjin); --虚拟列
如果要删除列的那个表中包含了大量的数据,你可以将该列标记为未用,而不用完全删除数据。你在任何查询或试图中都不会看到该列,并且所有定义在该列上的所有依赖对象(如约束和索引)都被删除。事实上,用词方法可以快速“删除”一个大数据列。
alter table emp set unused column job_id; --标记未使用列
然后,可以在某个维护时间中使用以下命令永久删除这两列。
alter table emp drop unused columns; --删除未使用列
如果认为表中行太多可能潜在的消耗撤销空间,可以用可选的 checkpoint 子句删除一列。通过在一定数目的行后使用检查点,将在删除该列的同时减少撤销数据的产生。参见下面的例子。每当在emp中删除10000行,数据库就使用一个检查点:
alter table emp drop unused columns checkpoint 10000;
alter table emp read write; --读写状态
alter table emp read only; --只读状态
可以在只读表上执行以下操作:
select
create/alter/drop index
alter table add/modify/drop/enable/disable constraint
进行物理特性更改的 alter table
rename table 和 alter table rename to
drop table
--创建会话级临时表
create global temporary table temp_tb1(col_a varchar2(30))
on commit preserve rows;
--创建事务级临时表
create global temporary table temp_tb2(col_a varchar2(30))
on commit delete rows
--insert
insert into ygb
values(bhseq.nextval,101,'A','2-3-86','男','西安');
--update
update gzb
set salary=salary*1.1
where eid=108;
--delete
delete from ygb
where eid=108;
--查看表的大小
IKKI@ test11g> select segment_name,segment_type,bytes from user_segments
2 where segment_name='EMP';
SEGMENT_NAME SEGMENT_TYPE BYTES
--------------- ---------- ----------
EMP TABLE 65536