zoukankan      html  css  js  c++  java
  • Oracle-创建新表,创建备份表,对表中插入多条数据

    一、创建新表

    0、基本语法

    create table 表名称

    (
    id varchar2(50) primary key ,
    name char(200) not null,
    phone number(11) unique,
    class varchar(10),
    foreign key (name)
    )

    tablespace USERS ----表放在USERS表空间
    pctfree 10 ----保留10%空间给更新该块数据使用
    initrans 1 -----初始化事物槽的个数
    maxtrans 255 ----最大事务槽的个数
    storage ----存储参数

    (initial 64K ---区段一次扩展64k
    next 1M
    minextents 1 ---最小区段数
    maxextents unlimited --最大区段无限制
    );

    说明:
    varchar2() ----0-4000,可变长度
    varchar()
    char() ----0-2000,固定长度,用空格在数据的右边补到固定长度
    number(6,2) ---6位整数、2位小数
    number(2) --2位整数
    clob ---txt文本
    blob ---图片、视频、声音等转换过来的二进制对象
    date ---sysdate

    1、创建备份表(变相的创建新表)

    creact table  新表名称 as select 字段1,字段2 from  旧表名称                                    #变相的创建新表+插入数据
    create table 新表名称 as select * from 旧表名称 where 1=2; ---复制结构,不要数据 #变相的创建新空表

    2、增列减列

    添加列  alter table 表名称 add  (name  varchar2(100),code varchar(20));   
    删除列 alter table 表名称 drop (name,code) ;

    3、表重命名

    表重命名 rename table 新表名称 to 旧表名称;  

    4、添加约束(add constraint)

    4-0、添加主键约束(将stuNo作为主键)

    alter table stuInfo

    add constraint PK_stuNo primary key (stuNo)

    4-2、添加外键约束 (主表stuInfo和从表stuMarks建立关系,关联字段stuNo)
    alter table stuInfo
    add constraint FK_stuNo foreign key(stuNo) references stuMarks(stuNo)

    4-3、添加唯一约束(身份证号唯一)
    alter table stuInfo
    add constraint UQ_stuID unique(stuID)

    4-4、添加默认约束(如果地址不填 默认为“地址不详”)
    alter table stuInfo
    add constraint DF_stuAddress default (‘地址不详’) for stuAddress

    4-5、添加检查约束 (对年龄加以限定 15-40岁之间)
    alter table stuInfo
    add constraint CK_stuAge check (stuAge between 15 and 40)

    5、添加表注释:学生信息表

    comment on table STUINFO 

    is '学生信息表';

    6、添加列名称:学号、学生姓名

    comment on column STUINFO.stuid 
    is '学号';
    comment on column STUINFO.stuname
    is '学生姓名';

    二、对表中插入多条数据

    1、采用insert into values 语句插入一条,写很多条语句即可多条数据,这种主要针对于离散值以及一些基础信息的录入,

         插入一条:     insert into Write_back_tiche_sheet (Collection_task)   VALUES   (100);   

      插入多条: 插入多条数据Oracle语法与MySQL语法有差异(如果想知道如何批量操作insert插入、update更新、delete删除https://blog.csdn.net/yh869585771/article/details/80191157):                        

                     mysql : insert into tablename (column1,column2) values
                     ('aa','bb'),
                     ('dd','cc'),
                     ('ee','ff');


                    oracle:insert all into tablename (column1,column2) values ('aa','bb')      #第一句用的是insert all into 不是 insert into
                    into tablename (column1,column2) values ('dd','cc')                                  #和mysql的写法不一样,多个values之间不用逗号分隔,但是需要加into tablename的形式的语句在每个values前面 
                    into tablename (column1,column2) values ('ee,'ff')
                    select 1 from dual;                                                                                      #最后跟的select 1 from dual语句中的dual表可以被替换为任何一个只要不是tablename的表

               #只适合于Oralce 9i以上版本

          如果插入的数据有规律,可利用for、loop循环插入,主要用于批量生成测试数据beginfor i in 1 .. 100 loopinsert into test(xh,mc) values(i||'','测试');end loop;end ;

    2、采用insert into select from 语句来一次性插入一个集合,这种主要依据于要插入的数据源已经存储于数据库对象中,或者利用dual虚表来构造数据,经过加工后写入一个集合。insert into test (xh,mx) select '123','测试' from dual;

          2-0、两个表存在字段一样,复制数据

      insert into  新表 select from  旧表;     <=>    select into 新表 from 旧表;

       2-1、两个表存在字段一样,只复制表结构,不复制数据  

         insert into 新表 select * from 旧表 where 1=2;        <=>              select into   新表    from    旧表   where 1=2;

       2-2、新表只有旧表的部分字段,复制部分字段数据 

      insert into  新表 (field1,field2,.....) select field1,field2,field3 from  旧表;     

      说明:

            以上只复制数据和结构,不能复制约束/索引等信息

            如果where条件满足时,查询结果有数据,即复制表数据

            如果 where 条件不成立时,查询结果为空,只复制表结构,没有数据

                 如果新表与旧表字段不一致,要说明取旧表的哪些字段,赋予新表

    3、采用plsql等工具、或者oracle的imp、impdp命令来导入,这种主要用数据库与数据库之间的大批量数据导入,导入的数据格式为plsql的pde、oracle的dmp等。dmp文件可使用table_exists_action参数控制导入动作:replace替换原表,truncate清除原表数据再导入,append增量导入数据,当然impdp数据泵的导入要依赖于directory路径。

    impdp 用户名/密码 dumpfile=123.dmp logfile=123.log directory=imp_dir tables=test table_exists_action=append

    4、使用excel文件直接拷贝。这种主要用于要写入的数据已是excel文件或者行列分明的其它格式文件,每一列的值和表结构相对应,可直接打开表的行级锁,把数据拷贝进入。

         打开行级锁方法:select t.*,rowid from 表名 t where 1=2;select * from  表名  where 1=2 for update;直接把excel数据拷贝到表里

  • 相关阅读:
    带勾选框的组织F4
    VBA 学习
    MACD指标量化策略实战案例
    DOM
    JS基础下
    JS基础
    CSS基础
    html实战4--transform3D
    html实战3--精灵图
    html实战2--四叶草
  • 原文地址:https://www.cnblogs.com/Formulate0303/p/12884131.html
Copyright © 2011-2022 走看看