Oracle中复制表的方法(create as select、insert into select、select into)
转:
Oracle中复制表的方法(create as select、insert into select、select into)
(作者:陈玓玏)
在使用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)的更多相关文章
- oracle中复制表和数据 && 多表插入语句
创建测试表和测试数据 create table test (id number,name varchar(10)); insert into test values(1,'liufang'); ...
- 如何在Oracle中复制表结构和表数据
1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...
- Oracle中复制表结构和表数据
一.复制表结构及其数据 create table new_table as (select * from old_table); 二.只复制表结构 create table new_table as ...
- 如何在Oracle中复制表结构和表数据 【转载】
1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...
- 【转载】如何在Oracle中复制表结构和表数据
1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...
- 【转】如何在Oracle中复制表结构和表数据
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- Oracle和sql server中复制表结构和表数据的sql语句
在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...
- select XXX into 和 Insert into XXX select
检索一个表中的部分行存到另一张表中. 一 .另外的那张表没有新建的时候,使用 select XXX into,创建的表与原表有相同的列名和类型: select * into Departments_C ...
- oracle和mssql中复制表的比较
库内数据复制MS SQL Server: Insert into 复制表名称 select 语句 (复制表已经存在)select 字段列表 into 复制表名称 from 表 (复制表不存在) Ora ...
随机推荐
- CentOS7添加/删除用户和用户组
1.新建用户 adduser testuser //新建testuser 用户 passwd testuser //给testuser 用户设置密码 2.建工作组 groupadd testgroup ...
- cookies localStorage和sessionStorage的区别
sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁.因此sessionStorage不是一种持久化的本地 ...
- Codeforces Round #604 (Div. 2) A. Beautiful String
链接: https://codeforces.com/contest/1265/problem/A 题意: A string is called beautiful if no two consecu ...
- Coins in a Line III
Description There are n coins in a line, and value of i-th coin is values[i]. Two players take turns ...
- Vue模板语法(一)
Vue模板语法 一 vue简介 Vue.js是一套构建用户界面的渐进式框架. 与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. Vue 的核心库只关注视图层,并且非常容易学习,非常容易与 ...
- java实现大文件上传分片上传断点续传
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...
- MATLAB曲线拟合函数
一.多项式拟合 ployfit(x,y,n) :找到次数为 n 的多项式系数,对于数据集合 {(x_i,y_i)},满足差的平方和最小 [P,E] = ployfit(x,y,n) :返回同上的多项式 ...
- project.config.json在设置了编译模式的时候会出现配置,怎么解决
因为之前为了方便就选了一个页面进行编译,但是想想回到index首页,就编译了一个pages/index/index. 出现了上面这个,当我再选择编译的时候,还是不会变成之前的. 解决方法是 把红框那段 ...
- 编译安装-httpd-2.2.15.tar.gz
编译安装(又称源代码安装) 找到httpd-2.2.15.tar.gz安装包并拖到桌面root文件夹里 解包阶段 tar zxf httpd-2.2.15.tar.gz -C /usr/src 配置阶 ...
- 大数据|linux权限chmod和chown
一.基础概念 1)rwx含义 示例如下 r:读权限read 4 w:写权限write 2 x:操作权限execute 1 -:无权限 2)drwxr - xr -x 与 - rw - r - - r ...