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

本文围绕Oracle数据库展开,介绍了表名和列名的命名规则、创建表的条件与语法、数据类型等基础知识。还阐述了查看表结构、克隆表、查看表占用磁盘空间的方法,以及表的修改、删除、注释添加等操作,同时提及了相关数据字典的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之所以搞这个文章,是因为我刚开始使用别人的脚本进行Oracle建库操作时,总提示右括号缺失,之前工作用MySQL,惯性思维让我短时间内还无法发现错误,于是看到此文档转载了下,发现不存在nvarchar这种字段类型。

表名和列名的命名规则
 必须以字母开头
 必须在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********.****.****格式,*为0或1
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 '......'

举例:

--NC接口调用异常表
create table Tab_NC_Interface_Log
(
  objectid       CHAR(36) not null,
  instanceid     CHAR(36),
  contentjson    NVARCHAR2(2000),
  contentunusual NVARCHAR2(2000),
  remark1        NVARCHAR2(2000),
  remark2        NVARCHAR2(2000),
  state          INTEGER,
  nums           INTEGER,
  method         NVARCHAR2(200),
  workflowcode   NVARCHAR2(200),
  activitycode   NVARCHAR2(200),
  createtime     DATE,
  lastmodifytime DATE,
  fromsys        NVARCHAR2(200),
  tosys          NVARCHAR2(200),
  createby       CHAR(36),
  modifyby       CHAR(36),
  note1          NVARCHAR2(200),
  note2          NVARCHAR2(200),
  note3          NVARCHAR2(200),
  note4          NVARCHAR2(200)  
);

comment on column Tab_NC_Interface_Log.objectid is '唯一标识';
comment on column Tab_NC_Interface_Log.instanceid is '实例表Id';
comment on column Tab_NC_Interface_Log.contentjson is '调用内容';
comment on column Tab_NC_Interface_Log.contentunusual is '异常原因';
comment on column Tab_NC_Interface_Log.remark1 is '备注1';
comment on column Tab_NC_Interface_Log.remark2 is '备注2';
comment on column Tab_NC_Interface_Log.state is '状态';
comment on column Tab_NC_Interface_Log.nums is '调用次数';
comment on column Tab_NC_Interface_Log.method is '调用方法';
comment on column Tab_NC_Interface_Log.workflowcode is '流程模板编码';
comment on column Tab_NC_Interface_Log.activitycode is '活动节点编码';
comment on column Tab_NC_Interface_Log.createtime is '创建时间';
comment on column Tab_NC_Interface_Log.lastmodifytime is '最后修改时间';
comment on column Tab_NC_Interface_Log.fromsys is '来源系统(调用H3接口的系统)';
comment on column Tab_NC_Interface_Log.tosys is '调用系统(H3调用接口的系统)';
comment on column Tab_NC_Interface_Log.createby is '创建人';
comment on column Tab_NC_Interface_Log.modifyby is '最后修改人';
comment on column Tab_NC_Interface_Log.note1 is '扩展标记位1';
comment on column Tab_NC_Interface_Log.note2 is '扩展标记位2';
comment on column Tab_NC_Interface_Log.note3 is '扩展标记位3';
comment on column Tab_NC_Interface_Log.note4 is '扩展标记位4';

comment on table Tab_NC_Interface_Log is 'NC接口调用异常表';

commit;

select * from Tab_NC_Interface_Log

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

 all_tab_comments
 user_tab_comments

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


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

转载于:https://www.cnblogs.com/wangfuyou/p/5942723.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值