Oracle alter table详解

//建测试表  
create table dept( 
       deptno number(3) primary key, 
       dname varchar2(10), 
       loc varchar2(13)  
       ); 
create table employee_info( 
       empno number(3), 
       deptno number(3), 
       ename varchar2(10), 
       sex char(1), 
       phone number(11), 
       address varchar2(50), 
       introduce varchar2(100) 
       ); 
-- 
//0.重命名  
  //0.1 表:rename dept to dt;  
           rename dt to dept; 
  //0.2 列:alter table dept rename column loc to location;  
           alter table dept rename column location to loc; 
//1.添加约束  
  //1.1 primary key  
      alter table employee_info add constraint pk_emp_info primary key(empno); 
  //1.2 foreign key  
      alter table employee_info add constraint fk_emp_info foreign key(deptno) 
      references dept(deptno); 
  //1.3 check  
      alter table employee_info add constraint ck_emp_info check 
      (sex in ('F','M')); 
  //1.4 not null  
      alter table employee_info modify phone constraint not_null_emp_info not null; 
  //1.5 unique  
      alter table employee_info add constraint uq_emp_info unique(phone); 
  //1.6 default  
      alter table employee_info modify sex char(2) default 'M'; 
//2.添加列  
   alter table employee_info add id varchar2(18); 
   alter table employee_info add hiredate date default sysdate not null; 
//3.删除列  
   alter table employee_info drop column introduce; 
//3.修改列  
  //3.1 修改列的长度  
      alter table dept modify loc varchar2(50); 
  //3.2 修改列的精度  
      alter table employee_info modify empno number(2); 
  //3.3 修改列的数据类型  
      alter table employee_info modify sex char(2); 
  //3.4 修改默认值  
      alter table employee_info modify hiredate default sysdate+1; 
//4.禁用约束  
  alter table employee_info disable constraint uq_emp_info; 
//5.启用约束  
  alter table employee_info enable constraint uq_emp_info; 
//6.延迟约束  
  alter table employee_info drop constraint fk_emp_info; 
  alter table employee_info add constraint fk_emp_info foreign key(deptno) 
        references dept(deptno) 
  deferrable initially deferred; 
//7.向表中添加注释  
  comment on table employee_info is 'information of employees'; 
//8.向列添加注释  
  comment on column employee_info.ename is 'the name of employees'; 
  comment on column dept.dname is 'the name of department'; 
//9.清除表中所有数据  
  truncate table employee_info; 
//10.删除表  
  drop table employee_info; 
-- 
//下面来看看刚刚才我们对表dept和表employee_info所做的更改  
//user_constraints视图里面包含了刚刚才我们创建的所有约束,以及其他信息,  
//你可以用desc user_constraints命令查看其详细说明  
select constraint_name,constraint_type,status,deferrable,deferred 
from user_constraints 
where table_name='EMPLOYEE_INFO'; 
-- 
CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS   DEFERRABLE     DEFERRED 
------------------------------ --------------- -------- -------------- --------- 
PK_EMP_INFO                    P               ENABLED  NOT DEFERRABLE IMMEDIATE 
FK_EMP_INFO                    R               ENABLED  DEFERRABLE     DEFERRED 
NOT_NULL_EMP_INFO              C               ENABLED  NOT DEFERRABLE IMMEDIATE 
SYS_C005373                    C               ENABLED  NOT DEFERRABLE IMMEDIATE 
UQ_EMP_INFO                    U               ENABLED  NOT DEFERRABLE IMMEDIATE 
CK_EMP_INFO                    C               ENABLED  NOT DEFERRABLE IMMEDIATE 
//我们可以通过user_cons_columns视图查看有关列的约束信息;  
select owner,constraint_name,table_name,column_name 
from user_cons_columns 
where table_name='EMPLOYEE_INFO'; 
-- 
OWNER                          CONSTRAINT_NAME                TABLE_NAME                     COLUMN_NAME 
------------------------------ ------------------------------ ------------------------------ --------------- 
YEEXUN                         PK_EMP_INFO                    EMPLOYEE_INFO                  EMPNO 
YEEXUN                         CK_EMP_INFO                    EMPLOYEE_INFO                  SEX 
YEEXUN                         NOT_NULL_EMP_INFO              EMPLOYEE_INFO                  PHONE 
YEEXUN                         SYS_C005373                    EMPLOYEE_INFO                  HIREDATE 
YEEXUN                         UQ_EMP_INFO                    EMPLOYEE_INFO                  PHONE 
YEEXUN                         FK_EMP_INFO                    EMPLOYEE_INFO                  DEPTNO 
//我们将user_constraints视图与user_cons_columns视图连接起来  
//查看约束都指向哪些列  
column column_name format a15; 
select ucc.column_name,ucc.constraint_name,uc.constraint_type,uc.status 
from user_constraints uc,user_cons_columns ucc 
where uc.table_name=ucc.table_name and 
      uc.constraint_name=ucc.constraint_name and 
      ucc.table_name='EMPLOYEE_INFO'; 
-- 
COLUMN_NAME     CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS 
--------------- ------------------------------ --------------- -------- 
EMPNO           PK_EMP_INFO                    P               ENABLED 
DEPTNO          FK_EMP_INFO                    R               ENABLED 
PHONE           NOT_NULL_EMP_INFO              C               ENABLED 
HIREDATE        SYS_C005373                    C               ENABLED 
PHONE           UQ_EMP_INFO                    U               ENABLED 
SEX             CK_EMP_INFO                    C               ENABLED 
-- 
//这里有个constraint_type,他具体指下面几种类型:  
//C:check,not null  
//P:primary key  
//R:foreign key  
//U:unique  
//V:check option  
//O:read only  
-- 
//我们可以通过user_tab_comments视图获得对表的注释  
select * from user_tab_comments 
where table_name='EMPLOYEE_INFO'; 
TABLE_NAME                     TABLE_TYPE  COMMENTS 
------------------------------ ----------- -------------------------- 
EMPLOYEE_INFO                  TABLE       information of employees 
-- 
//我们还可以通过user_col_comments视图获得对表列的注释:  
select * from  user_col_comments 
where table_name='EMPLOYEE_INFO'; 
-- 
TABLE_NAME                     COLUMN_NAME                    COMMENTS 
------------------------------ ------------------------------ --------------------------- 
EMPLOYEE_INFO                  EMPNO                           
EMPLOYEE_INFO                  DEPTNO                          
EMPLOYEE_INFO                  ENAME                          the name of employees 
EMPLOYEE_INFO                  SEX                             
EMPLOYEE_INFO                  PHONE                           
EMPLOYEE_INFO                  ADDRESS                         
EMPLOYEE_INFO                  ID                              
EMPLOYEE_INFO                  HIREDATE  
-- 
select * from user_col_comments 
where table_name='EMPLOYEE_INFO' and 
      comments is not null; 
-- 
TABLE_NAME                     COLUMN_NAME                    COMMENTS 
------------------------------ ------------------------------ ------------------------ 
EMPLOYEE_INFO                  ENAME                          the name of employees 
-- 
//最后我们来查看一下修改后的表:  
desc employee_info; 
Name     Type         Nullable Default   Comments               
-------- ------------ -------- --------- ---------------------  
EMPNO    NUMBER(2)                                              
DEPTNO   NUMBER(3)    Y                                         
ENAME    VARCHAR2(10) Y                  the name of employees  
SEX      CHAR(2)      Y        'M'                              
PHONE    NUMBER(11)                                             
ADDRESS  VARCHAR2(50) Y                                         
ID       VARCHAR2(18) Y                                         
HIREDATE DATE                  sysdate+1 
-- 
desc dept; 
Name   Type         Nullable Default Comments                
------ ------------ -------- ------- ----------------------  
DEPTNO NUMBER(3)                                             
DNAME  VARCHAR2(10) Y                the name of department  
LOC    VARCHAR2(50) Y 
-- 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值