转:

Oracle中复制表的方法(create as select、insert into select、select into)

2018-07-30 22:10:37 小白白白又白cdllp 阅读数 7001更多

分类专栏: 数据库
 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

(作者:陈玓玏)

在使用SQL的过程中,常常需要复制表,或者通过建立临时表来存储select语句生成的结果,这个在建模过程中造变量的时候用得尤其多。

1、用create as select

 drop table tablename;
create table tablename as
select * from tab1;
  • 1
  • 2
  • 3

Oracle中删除表格不能先用if exists做判断,所以如果表格不存在,直接运行这两句是会报错的。

关于这种方法的缺点

一说是在其他博客看到的,意思是这种方法不能把默认值一起复制过来,这个错误在进行表备份时可能会有较大影响,但是对于做挖掘的朋友们来说,应该不怎么会影响我们造变量。而且Oracle很智能,即使你没有设定新表的字段类型,表的字段还是会根据你的原始字段或者分析函数的计算结果来存储。

二说这种方法的缺点是容易造成临时表空间不足。这种方法其实不是所有的数据库都会发生的,我碰到这种情况主要是因为数据库里写了很多触发器,每次drop table后再create table就会触发一次,而堡垒机上的数据库又常常反应不过来,就导致很多表已经删掉了,数据库以为还存在,结果可能就建不了表了。

正是因为这个缺点,我现在已经投向了insert into select的怀抱。

2、insert into select

truncate table tablename;
insert into tablename
select * from tab1;
commit;
  • 1
  • 2
  • 3
  • 4

这种方法其实是通过truncate一行一行地清空数据,再通过insert into一行一行地写入的。你会发现用create as复制表,会提示你执行完成,而用insert into,软件会提示你成功插入多少多少行记录。

再者,为什么要加commit? 如果不加commit,你会发现你的确能在Oracle中取到数据,但是如果你想用Python连接SQL来取数,会取到一个空表。所以如果你在Oracle中用了insert into来更新表的内容,请记得加commit,养成好习惯。

这种方法虽然保证我不会因为频繁叨扰触发器而碰到问题,但是也有以下几个缺点

一是这种方法只能向已经存在的表中插入数据,所以如果表不存在,还是得先用create as;

二是这种方法只能插入相同字段的数据,也就是说如果你想新增或者删除字段,还是得用drop create as从头再来。

所以我喜欢在调试阶段用这种方法,因为总是避免不了造变量时候出点幺蛾子,要反复去修改取数逻辑,重跑数据表,一上来就频繁用create as,总觉得怪怪的。

3、select into

SELECT *
INTO tablename_backup
FROM tablename
  • 1
  • 2
  • 3

这种方法显而易见了,就是为复制表而存在,备份表时可用,但是造变量时怕还是用上面两种更方便了。

Oracle中复制表的方法(create as select、insert into select、select into)的更多相关文章

  1. oracle中复制表和数据 && 多表插入语句

    创建测试表和测试数据 create table test  (id number,name varchar(10));  insert into  test values(1,'liufang');  ...

  2. 如何在Oracle中复制表结构和表数据

    1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...

  3. Oracle中复制表结构和表数据

    一.复制表结构及其数据 create table new_table as (select * from old_table); 二.只复制表结构 create table new_table as ...

  4. 如何在Oracle中复制表结构和表数据 【转载】

    1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...

  5. 【转载】如何在Oracle中复制表结构和表数据

    1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...

  6. 【转】如何在Oracle中复制表结构和表数据

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  7. Oracle和sql server中复制表结构和表数据的sql语句

    在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...

  8. select XXX into 和 Insert into XXX select

    检索一个表中的部分行存到另一张表中. 一 .另外的那张表没有新建的时候,使用 select XXX into,创建的表与原表有相同的列名和类型: select * into Departments_C ...

  9. oracle和mssql中复制表的比较

    库内数据复制MS SQL Server: Insert into 复制表名称 select 语句 (复制表已经存在)select 字段列表 into 复制表名称 from 表 (复制表不存在) Ora ...

随机推荐

  1. linux文档与目录结构

    Linux文件系统结构 本文转自 https://www.cnblogs.com/pyyu/p/9213237.html Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有“ ...

  2. JavaScript和JQuery之战再续

    之前写过关于JavaScript和Jquery的之间的比较,现在再看比较偏向于理论知识,还不是很理解.经过这一段时间的项目的锻炼,对JQuery有了新的认识. 原生JavaScript和jQuery的 ...

  3. vbs剪切Excel某一行

    set oExcel = CreateObject( "Excel.Application" ) '创建oExcel对象 oExcel.Visible = false '4) 打开 ...

  4. 九.Protobuf3特殊类型

    Protobuf3 Any类型 Any消息类型允许您将消息作为嵌入类型,而不需要它们 .proto定义.Any包含任意序列化的消息(字节),以及一个URL,该URL充当该消息的全局唯一标识符并解析为该 ...

  5. c语言1博客作业08

    一.本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 http://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/9982 我在 ...

  6. linux 中截取字符串

    shell中截取字符串的方法有很多中,${expression}一共有9种使用方法.${parameter:-word}${parameter:=word}${parameter:?word}${pa ...

  7. [CSS] Create a Card Flip Animation with CSS

    Animation can be a powerful way to enhance a user experience. In this lesson, we'll walk through the ...

  8. BurpSuite Intruder模块匹配返回包内容

    很多时候burpsuite intruder爆破我们是看返回包的长度,那么如何根据返回包的内容来做筛选呢? 这里我用的本地某cms环境做个演示 Intruder模块怎么用的不用介绍了吧 直接进入正题 ...

  9. 【转】跟我一起写 Makefile

    概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefi ...

  10. 深入基础(二)练习题,REPL交互解析器

    NPM     关于npm命令其实不算很多很多,起码比dos命令少不少呢废话少说npm命令大全and各个命令用处持续更新中..来自园子内另外一位大神~:http://www.cnblogs.com/P ...