慎用create table as select,不会copy约束,主键什么东东都不会复制

1、再做一些数据迁移时候,很多人会使用create table  as select * from table where id=-1的方式来年建立一摸一样的表,但是这样做有个很大的弊端,不能将原表中的default value也一同迁移过来。

2、  Using the CREATE TABLE ... AS SELECT ... command: This command will copy acrooss to the new table all the data,but the constraints triggers ,and so on will not be transferred to the new table.

那些都是not null约束,其他的约束和trigger是带不过来了,严格说来not null也是约束的一种,只不过教材上把它排除在外了吧。

慎用create table as select,一定要注意默认值的问题

博客分类:  Oracle

oraclecreate talbe as select数据库迁移

再做一些数据迁移时候,很多人会使用create table  as select * from table where id=-1的方式来年建立一摸一样的表,但是这样做有个很大的弊端,不能将原表中的default value也一同迁移过来,可以看下面的例子:

第一,新建一个表

-- Create table
create table table01
(
  id        number(16),
  add_date  date default sysdate,
  status    number(1),
  entp_code varchar2(200)
)

第二,使用create table table02 as
select * From table01 where id=-1

第三、看看两个表的结构,会发现第二张表的defaule value没有了,如下2图,可以很明显看出来,表02的add_date的默认值得sysdate没有了

table01的表结构

 table02的表结构

所以各位在做数据库迁移时候,使用create table as select时候,一定要注意默认值的问题

上周,因为此问题,导致生产环境下产生了大量的问题,头大了一天,特此奉献出来。

====================================================================

Create table as select 语句的两点说明

SQL > create table emp_copy as select * from emp where deptno=10;

第一,注意emp_copy表中没有定义任何列名,因为我们在列子句中用通配符从emp表取得数据,让Oracle像emp表中一样生成emp_copy表中的列——相同名称,相同数据类型定义。

第二,SQL*PLUS中可以发出的任何select语句可以放在create table as select 语句中,然后Oracle会自动获得从emp表选择的数据,在进emp_copy表中。但是 如果select语句的列子句中包括特定列清单,则create table子句列出表中要包括的列或者不列,例如:

SQL > create table emp_copy_2 (empno,sal) as select empno, sal from emp where deptno=10,或者

create table emp_copy_1  as select empno, sal from emp where deptno=10;都可以  不写和写列都可以

========================================================

大家都知道create table a as select * from b可以创建一个与b表结构一样的表,但是在实际应用中最好不要这么创建表。原因是这样只创建表的结构,而不会将原表的默认值一起创建。

说白了,表结构出来了,默认值没有。

另外,但是有一个我对一个大表执行create table a as select * from b时候报了一个temp表空间不足,不知道是什么原因,记录一下。下次发现在处理吧。

原文地址:https://www.cnblogs.com/fpcbk/p/12638271.html

时间: 2024-09-28 18:15:30

慎用create table as select,不会copy约束,主键什么东东都不会复制的相关文章

慎用create table as select,一定要注意默认值的问题

再做一些数据迁移时候,很多人会使用create table  as select * from table where id=-1的方式来年建立一摸一样的表,但是这样做有个很大的弊端,不能将原表中的default value也一同迁移过来,可以看下面的例子: 第一,新建一个表 -- Create table create table table01 (   id        number(16),   add_date  date default sysdate,   status    nu

oracle数据库【表复制】insert into select from跟create table as select * from 两种表复制语句区别

create table  as select * from和insert into select from两种表复制语句区别 [sql] view plain copy create table targer_table as select * from source_table insert into target_table(column1,column2) select column1,column2 from source_table 以上两句都是将源表source_table的记录插

sqlserver不能直接create table as select

sqlserver不能直接create table as select 在sqlserver 下想复制一张表的,想到oracle下直接create table xxx as select * from ....即可.但是结果却是错误的,baidu一下发现.sqlserver的语法是 : select * into tablenew from tableold Insert into select 与create table as的性能测试及create table 2013-10-05 09:5

CREATE TABLE new_tbl_name SELECT * FROM old_tbl_name / INSERT INTO new_tbl_name SELECT * FROM old_tbl_name

DESCRIBE PRODUCTS_TBL; +-----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+-------+ | PROD_ID | varchar(10) | NO | PRI | NULL | | | PROD_DESC |

MySQL中表复制:create table like 与 create table as select

CREATE TABLE A LIKE B 此种方式在将表B复制到A时候会将表B完整的字段结构和索引复制到表A中来. CREATE TABLE A AS SELECT x,x,x,xx FROM B LIMIT 0 此种方式只会将表B的字段结构复制到表A中来,但不会复制表B中的索引到表A中来.这种方式比较灵活可以在复制原表表结构的同时指定要复制哪些字段,并且自身复制表也可以根据需要增加字段结构. 两种方式在复制表的时候均不会复制权限对表的设置.比如说原本对表B做了权限设置,复制后,表A不具备类似

MySQL中表复制:create table like 与 create table as select

1    CREATE TABLE A LIKE B此种方式在将表B复制到A时候会将表B完整的字段结构和索引复制到表A中来. 2.    CREATE TABLE A AS SELECT * FROM B 此种方式只会将表B的字段结构复制到表A中来,但不会复制表B中的索引到表A中来.这种方式比较灵活可以在复制原表表结构的同时指定要复制哪些字段,并且自身复制表也可以根据需要增加字段结构. 两种方式在复制表的时候均不会复制权限对表的设置.比如说原本对表B做了权限设置,复制后,表A不具备类似于表B的权

create table 使用select查询语句创建表的方法分享

转自:http://www.maomao365.com/?p=6642 摘要:下文讲述使用select查询语句建立新的数据表的方法分享 ---1 mysql create table `新数据表名` select * from `旧数据表名`; -------------------------------- ---2 oracle create table 新数据表名 as select * from 旧数据表名 -------------------------------- --3 mss

Create table as select

create table xxx as select create table table1 as select * from table2 where 2=3; 根据table2的表结构,创建tables1 create table table1 as select * from table2 根据table2的表结构,创建tables1,同时将table2的数据插入table1 create table table1(column1_rename,column2_rename) as sel

CREATE TABLE 表名 AS SELECT 语句

1.新表不存在复制表结构即数据到新表 ? 1 2 create table new_table select * from old_talbe; 这种方法会将old_table中所有的内容都拷贝过来,用这种方法需要注意,new_table中没有了old_table中的primary key,Extra,auto_increment等属性,需要自己手动加,具体参看后面的修改表即字段属性.只复制表结构到新表 ? 1 2 3 4 5 6 # 第一种方法,和上面类似,只是数据记录为空,即给一个false