• 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数据拷贝到表里

  • 相关阅读:
    Kinect 开发 —— 硬件设备解剖
    Kinect 开发 —— 引言
    (转)OpenCV 基本知识框架
    OpenCV —— 摄像机模型与标定
    OpenCV —— 跟踪与运动
    OpenCV —— 图像局部与分割(二)
    OpenCV —— 图像局部与部分分割(一)
    OpenCV —— 轮廓
    OpenCV —— 直方图与匹配
    OpenCV —— 图像变换
  • 原文地址:https://www.cnblogs.com/Formulate0303/p/12884131.html
Copyright © 2020-2023  润新知