oracle中用SQL语句创建和管理表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中用SQL语句创建和管理表相关的知识,希望对你有一定的参考价值。

表名和列名的命名规则
 必须以字母开头
 必须在1-30个字符之间
 只能包含A-Z,a-z,0-9,_,$,#
 不能与用户定义的其它对象重名
 不能使用ORACLE的保留字

创建前具备的条件:
 CREATE TABLE权限

建表时必须指定:
 表名
 列名,列的数据类型,最大长度

数据类型:
 varchar2(size) 变长字符型(最大长为4000字符)
 char(size)  定长字符型(最大2000字符)
 number(p,s)  数值型
 date   日期型
 long   变长大字符型(最大2G)
 CLOG   大字符型(最大4G)
 raw    裸二进制数据(最大2000字符)
 long raw  裸二进制数据(最大2G) 
 blob   二进制数据,最大4G
 bfile   外部二进制文件,最大4G
 

类型 含义 存储描述 备注
CHAR 固定长度字符串 最大长度2000bytes  
VARCHAR2 可变长度的字符串, 最大长度4000bytes 可做索引的最大长度749
NCHAR 根据字符集而定的固定长度字符串 最大长度2000bytes  
NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000bytes  
DATE 日期(日--年) DD-MM-YY(HH-MI-SS),经过严格测试,无千虫问题  
TIMESTAMP 日期(日--年) DD-MM-YY(HH-MI-SS:FF3),经过严格测试,无千虫问题 DATE相比较,TIMESTAMP有小数位秒信息
LONG 超长字符串 最大长度2G,足够存储大部头著作  
RAW 固定长度的二进制数据 最大长度2000bytes 可存放多媒体图象声音等
LONG RAW 可变长度的二进制数据 最大长度2G 可存放多媒体图象声音等
BLOB 二进制数据 最大长度4G  
CLOB 字符数据 最大长度4G  
NCLOB 根据字符集而定的字符数据 最大长度4G  
BFILE 存放在数据库外的二进制数据 最大长度4G  
ROWID 数据表中记录的唯一行号 10bytes ********.****.****格式,*01
NROWID 二进制数据表中记录的唯一行号 最大长度4000bytes  
NUMBER(P,S) 数字类型 P为整数位,S为小数位  
DECIMAL(P,S) 数字类型 P为整数位,S为小数位  
INTEGER 整数类型 小的整数  
FLOAT 浮点数类型 NUMBER(38),双精度  
REAL 实数类型 NUMBER(63),精度更高


创建语法:
 create table [schema.]tablename
 (column datatype [default expr] [constaint],
 ....)

查看表结构:
 desc tablename
 
oracle表的类型
 用户自定义表
 数据字典
  oracle 自动创建的一组表
  包含了数据库的自身信息,用于管理和维护数据库用

 关于表的数据字典:
  user_catalog,all_catalog,dba_catalog,
  user_tables,all_tables,dba_tables,

 user_tables 自已建的表
 all_tables 自已可以访问的表
 dba_tables 数据库中所有的表

如何克隆一个表
 克隆整个表:
  create table emp as select * from scott.emp;
 克隆表结构:
  create table emp2 as select * from scott.emp where 1=2;
 
 
如何查看一个表占用的磁盘空间:
 dba_extents,
 dba_segments


 insert into emp select * from emp;

 select SEGMENT_NAME,SUM(BYTES)/1024/1024
 from dba_extents where SEGMENT_NAME=‘EMP‘ AND OWNER=‘SYS‘
 GROUP BY SEGMENT_NAME;

  SELECTOWNER,SEGMENT_NAME,SEGMENT_TYPE,
 TABLESPACE_NAME,bYTES/1024/1024
   FROM DBA_SEGMENTS WHERE SEGMENT_NAME=‘EMP‘;
 
数据字典中更新表信息
 exec dbms_stats.gather_table_stats(‘SCOTT‘,‘TEST‘);

 

修改表:
 添加新列
 alter table tablename
 add (column datatype [default expr]);


 删除列:
 alter table tablename
 drop column colname

 列改名:
 alter table tablename
 rename column colname to new_colname

 表改名:
 alter table tablename rename to new_tablename
 rename test2 to test

 修改列的数据类型,尺寸和默认值
 alter table tablename
 modify (column datatype [default values])

 将列标记为不可用:
 alter table tablename
 set unused(column)

 删除表
 drop table tablename
 
 截断表(删除所有记录,保留表结构)
 truncate table tablename

 表加注释
 comment on table tablename is ‘...注释内容...‘


 列加注释
 comment on column tablename.column is ‘......‘


 与注释相关的数据字典
 all_col_comments
 user_col_comments

 all_tab_comments
 user_tab_comments

关于表结构的数据字典:
 dba_tab_columns


使用空值和默认值
 隐式:插入记录时,不指定字段,不指定值
 显示:插入记录时,空值字段填null,默认值字段填default

 

参:http://blog.sina.com.cn/s/blog_690d63f80100jiq4.html

以上是关于oracle中用SQL语句创建和管理表的主要内容,如果未能解决你的问题,请参考以下文章

如何在SQL中用ALTER TABLE语句修改表中的列名?

Oracle:PL/SQL中用SQL语句添加数据 中文出现乱码问题?[有图]

Oracle数据库——表的创建与管理

ORACLE 创建表的SQL语句

oracle创建一个表的sql语句是怎样写的

SQL 基础之DDL语句创建和管理表(十四)