a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 101|回复: 1

[综合] Oracle辅导:修改表结构

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
3修改表结构   修改表结构是对已经创建完成(实际是存放在数据库字典里)的表的结构进行修改。不同的Oracle版本允许对表的修改也不一样。新版的Oracle8i可以对表中的列进行删除。7 b- N# Y/ k4 s. |$ J  p  G
  3.1 修改表结构命令修改表结构的命令由ALTER TABLE来完成。该命令的参数较多,下面仅给出一些基本的部分。详细请参考《ORACLE8i SQL REFERENCE》 。
2 F1 u9 ~- |# H  ALTER   TABLE   [user.]   table' _+ x/ D. @( F- o8 t
  [ADD ({colum_element|table_constraint}) M; ]5 {8 Y: |$ M  J  q' [
  [,{column_element|table_constraint}]...)] [MODIFY(column_element[,column_element]...)] [DROP   CONSTRAINT   constraint]...
/ e, l  s" l& I$ @) q! L9 H( Y  [PCTFREE integer][PCTUSED integer]
' }, i$ J- Y3 _* F  [INITRANS integer][MAXTRANS integer]
" \3 b9 s! n8 b( Z+ y  [STORAGE storage]- {' P/ J; }# Z0 k; T$ o2 z
  [BACKUP]
; [/ F0 q# n' f7 t: z" J* A  ALTER TABLE可以作的操作有:5 m# i& B' Y& `4 a: V. U/ f, L" S: _
  l增加一个列(字段)宽度;5 u" w3 q4 V! t* M( E
  l减少一个列(字段)宽度(该列必须无数据);
9 I! b1 l2 m: k  l增加一个列(字段);4 x0 p* S2 ]) z, A1 v. p
  l修改列的定义;
4 y7 [7 K3 r' D) p/ ]! I' C' K  l    或一个限制;(如数据类型,NOT NULL);仅当某列的值为空时才能修改其类型;
# p) |/ \5 Q2 D+ O1 G  l去掉限制;
% \1 e2 \2 q' d& D/ \/ x) ^7 A$ C  l修改存储分配;$ p  N1 G* f' d6 t+ x3 N0 g+ E
  l记录表已作过BACKUP;9 {% z2 u; {5 Z5 Q' w( z
  l删除已存在的列(仅Oracle8i及以后版本);
7 p+ i5 Q  O; t  l重新定位和组织表(仅Oracle8i及以后版本);) ?) F& V& T, d3 _
  l    将表标识为不可用(仅Oracle8i及以后版本)。0 q# L  V0 [/ ?8 N7 \
  3.2  修改表结构例子
  E7 y* j0 \* G1 P) O; _2 b  例1:对已经存在的表增加一新的列:
* O! s" e9 r  Q* k( s# j# y( z  SQL>alter table dept add ( headcount number(3) );
1 o* S& }0 C) _6 R- y9 Y  例2:对表的列修改其大小:5 E" f1 P* |0 {" ~3 n+ B
  SQL>alter table dept modify( Dname char(20) );4 F1 l! i2 y) i4 ~, v$ K$ E
  如果被修改的列没有空(已有数据),则被提示:! N- }. g3 U: U( I( }. H+ n8 E
  ORA-01439: Column to be modified must be empty to change
( V% H' H3 C: M' y2 c8 `  datatype9 i1 A" l# d8 t; w' V
  ORA-01441: Column to be modified must be empty to decrease
* h/ o! b; Q3 q. i6 O5 Y' v  column length
3 K. k6 L' q4 P6 g: Y: ?6 h$ \; [& k  例3:复制一个表:
/ d/ p& [, Y! o& R  CREATE TABLE HOLD_TANK AS SELECT TANK_NO, CHIEF_CARETAKER_NAME* p0 e  e( u$ ?( A2 O
  FROM TANK;
, T4 L/ r3 o$ A0 n1 j; R  例4:参照某个已存在的表建立一个表结构(不需要数据)
2 X6 N4 h. ?# H; ~; \# Q! ]- H$ a4 t
  create table emp2 as select * from emp where rownum
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:54:50 | 显示全部楼层

Oracle辅导:修改表结构

</p>  它的基本语法为:+ r: ]4 w. _% k2 O+ G
  ALTER TABLE . . . . . . MOVE TABLESPACE ;
2 j+ `1 G5 u/ Q$ Y( p7 m  如:
$ _% e. X+ [: g7 H4 Y  Alter table emp move tablespace users;
6 k9 X) w, N8 S( J$ m  例8:将表标识为不可用:1 [- a8 G) ]; M- Q8 I/ G. R
  这是Oracle8i的新功能,可以实现对空间的收回等。
, y" w, K! N% P8 K8 I/ @  基本语法为:
; |2 i+ Y1 c2 _$ ]) j  ALTER TABLE . . . . . . SET UNUSED COLUMN;; |% h4 I& R3 |/ _$ a  m1 j
  如:
0 L7 Q; h; |0 N# O7 @5 n! Q  Alter table emp set UNUSED COLUMN xyz;
% b: E9 H$ v( B+ j  W3 b7 c  提示:虽然Oracle允许用户对表的结构进行修改。但建议你在工作中不要采用方式。因为表结构被多次修改会影响应用系统的性能。5 _, x. W' ^$ `* @- W3 ~
  3.3 删除表结构Oracle提供DROP TABLE命令可以实现删除表数据和结构。提醒初学者,不要轻易使用DROP TABLE命令。DROP TABLE 命令语法:DROP TABLE [user.]table_name[CASCADE CONSTRAINTS] CASCADE CONSTRAINTS表示所有指向本表的主键,外部键被删掉。当删除一个表时,下面的对象也随之被删掉。
9 b$ y! _7 G) A: r! l  l表的索引;6 x' |1 h% _( F* n4 m
  l指向本表的外部键;
. J, m. d9 S7 B) f$ k( f/ P  l本表的触发器;
! U+ }, ^, {3 U+ r, M# ^: I  l本表中的分区;  v$ O6 F8 L5 A) ~# g
  l本表的快照;2 m5 d) X" L, [
  l本表的角色和用户权限;
' g* A0 ]! G5 o6 v& I4 q% H( g, R  l    加在本表的所有限制。
. H7 M! L0 K, d: T8 h+ x: O  提示:如果你在定义表结构时,采用了主键、外部键来定义了一序列表。则在删除表结构时要小心。不要轻易用CASCADE子句。5 Z; n. N6 S8 o
  3.4 使用CHECK作限制约束Oracle提供了一个很有用的子句CHECK,它可以实现对数据的自动检查。它的用法是在创建表结构时使用。如:" \; E& T  |4 ^. A
  本文出自 51CTO.COM技术博客5 V) h" O9 g: M& O6 d
  上一篇 138端口解析  下一篇 java: cannot execute binary file 如果遇到这..- x$ y# x+ e/ M0 ~& g5 E4 b4 j! C
  类别:数据库系列┆技术圈(0)┆阅读(9)┆评论(1)┆推送到技术圈┆返回首页& ^2 n  j# m! `1 B$ z" G! f! K
  文章评论
: v( {& h0 j4 y) b$ e3 X  [1楼] jxwpx( a8 b. P9 r2 m: j
  2009-11-05 10:06:21
% E  H) c9 P$ v2 {8 A/ v- Z1 v  Create table worker
+ q+ a& v+ G) D. u  (   empno   number(4)   primary   key,
5 ]) D2 i. z+ Z4 ~" t  name     varchar2(10),/ t3 l9 r( S$ R4 B
  age     number(2)   CHECK(age   between 18   and   65 ),2 L2 s( s' \7 N" O
  /* age number(2) CHECK( age >=18 and age0 and sal+comm create table new_emp as select * from emp UNRECOVERABLE;
2 j7 E7 H% A* E4 Y0 l  表已创建。
# ?. A' R5 ?! {& c. p8 F# Q* t' |  或
$ Q' k9 e- o2 e- |; r8 n1 g" s- U/ I7 _2 D6 Q  CREATE TABLE new_emp AS select * from emp NOLOGGING;" x7 q1 P- E  ?; t
  注:虽然上面提到UNRECOVERABLE,但是Oracle推荐你使用NOLOGGING或LOGGING;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 10:37 , Processed in 0.131840 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表