Oracle数据库系列Oracle修改表结构中常用sql操作语句

Posted 一宿君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle数据库系列Oracle修改表结构中常用sql操作语句相关的知识,希望对你有一定的参考价值。

创建表(复制表)

为了不破坏原来emp表和dept表的结构,我们快速创建两张副表emp5(员工表)和dept5(部门表):

  • 首先创建表结构(和原表结构保持一致):

    --创建EMP5员工表
    
    create table EMP5
    (
      empno    NUMBER(4) not null,
      ename    VARCHAR2(10),
      job      VARCHAR2(9),
      mgr      NUMBER(4),
      hiredate DATE,
      sal      NUMBER(7,2),
      comm     NUMBER(7,2),
      deptno   NUMBER(2),
      eremark  VARCHAR2(40),
      sex      CHAR(3)
    )
    
    --创建DEPT5部门表
    create table DEPT5
    (
      deptno NUMBER(2) not null,
      dname  VARCHAR2(14),
      loc    VARCHAR2(13)
    )
    
  • 用insert into直接从原表中将数据插入新表中:

    - --保持新表emp5结构和原表emp结构相同(直接将所有制复制到新表emp5中)
    insert into emp5 select * from emp;
    
    --保持新表dept5结构和原表dept结构相同(直接将所有制复制到新表dept5中)
    insert into dept5 select * from dept;
    
  • 如果嫌上述操作麻烦,还有简便的方法,如下:

    --创建和emp表结构一样的表emp5(使条件不成立即创建表不传入数据)
    create table emp6 as select * from emp where 1=2;
    
    --保持新表emp5结构和原表emp结构相同(直接将所有制复制到新表emp5中)
    insert into emp5 select * from emp;
    
  • 当条件成立的时候,就是完全复制出一张副表:

    --创建和emp表结构一样的表emp6(相当于复制一个完全一样的附副表)
    create table emp7 as select * from emp;
    

    在这里插入图片描述
    在这里插入图片描述

删除表(记录)

  • delete和drop的区别:
    --删除整张表包括记录
    drop table Dept5;
    
    --只删除表记录
    delete table Dept5;
    

修改表结构(常见sql操作)

  • 添加表主键约束
    --添加表主键
    alter table emp5 add constraint pk_emp5 primary key(empno);
    
  • 删除表主键约束
    --删除主键约束
    alter table emp5 drop constraint pk_emp5;
    
  • 为表添加外键约束
    --为emp5表添加外键约束
    alter table emp5 add constraint fk_emp5_deptno foreign key(deptno) references Dept5(deptno);
    
  • 删除外键约束
    --删除外加约束
    alter table emp5 drop constraint fk_emp5_deptno;
    
  • 添加新字段
    --添加字段
    alter table emp5 add(empdesc varchar2(50));
    
  • 修改表字段类型及参数
    --修改表字段类型及参数
    alter table emp5 modify(empdesc varchar2(100));
    
  • 修改字段的名字
    --修改字段的名字
    alter table emp5 rename column empdesc to empdescription;
    
  • 删除字段(column关键字不能少)
    --删除表字段(column关键字不能少)
    alter table emp5 drop column empdescription;
    
  • 添加性别检查约束(只能输入男或女)
    --添加性别检查约束(只能输入男或女)
    alter table emp5 add constraint ck_emp5_sex check(sex in ('男','女'));
    
  • 添加年龄检查约束(年龄>0 and <=100)
    --先添加年龄字段
    alter table emp5 add(age number(3));
    
    --添加年龄检查约束(年龄>=0 and <=100)
    alter table emp5 add constraint ch_emp5_age check(age>0 and age<=100);
    
  • 修改字段默认值
    --修改字段默认值
    alter table emp5 modify age default 0;
    
  • 添加键唯一性约束(基于单列)
    --为表单个字段添加唯一约束(基于单列字段)
    alter table emp5 add constraint un_emp5_empno unique(empno);
    
    --禁用单列字段唯一约束
    alter table emp5 disable constraint un_emp5_empno;
    
    --启用单列字段唯一约束
    alter table emp5 enable constraint un_emp5_empno;
    
    --删除单列字段唯一约束
    alter table emp5 drop constraint un_emp5_empno;
    
  • 添加键唯一性约束(基于多列)
    --为表多个字段多列唯一约束(基于多列)
    alter table emp5 add constraint un_emp5_empnoAndEname unique(empno,ename);
    
    --禁用多列字段唯一约束
    alter table emp5 disable constraint un_emp5_empnoAndEname;
    
    --启用多列字段唯一约束
    alter table emp5 enable constraint un_emp5_empnoAndEname;
    
    --删除多列字段唯一约束
    alter table emp5 drop constraint un_emp5_empnoAndEname;
    

创建序列

  • 序列
    --创建序列号
    create sequence seq_emp5_empno
    start with 1     --初始值 
    increment by 1   --增长间隔值
    minvalue 1       --最小值
    maxvalue 9999999 --最大值
    cache 20         --缓冲池
    
    
    --查询下一个序列值
    select seq_emp5_empno.nextval from dual;
    
    --查询当前序列值(不改变序列号)
    select seq_emp5_empno.currval from dual;
    
    --修改增长间隔值为2
    alter sequence seq_emp5_empno increment by 2;
    

常规查询语句

  • 查询字段
    --拼接字符串
    select 'aaa'||'bbb' from dual;
    
    --查询empno是7499的员工信息
    select * from emp5 where empno = 7499;
    
    --查询empno不是7499的员工信息(Oracle中特有的一种不等运算符)
    select * from emp5 where empno <> 7499;
    
    --因为很多老程序员都习惯用!=,所以Oracle就保留了原来的,两个都可以用
    select * from emp5 where empno != 7499;
    
    --查找员工表中上司为空的员工信息
    select * from emp5 where mgr is null;
    

以上是关于Oracle数据库系列Oracle修改表结构中常用sql操作语句的主要内容,如果未能解决你的问题,请参考以下文章

Oracle的常用修改表及字段的语句

Oracle 数据库常用SQL语句

Oracle 表空间详解

Oracle表结构转换SqlSERVER表结构 脚本

oracle 修改表结构或修改视图时很慢,直接让PLSQL卡死,不知道是啥原因? 重启oracle 服务却又可以了!

oracle简介及常用操作