何时将 CREATE TABLE AS SELECT 与 CREATE TABLE LIKE?

Posted

技术标签:

【中文标题】何时将 CREATE TABLE AS SELECT 与 CREATE TABLE LIKE?【英文标题】:When to CREATE TABLE AS SELECT versus CREATE TABLE LIKE? 【发布时间】:2013-06-29 00:05:48 【问题描述】:

我可以使用以下方式“复制”表格:CREATE TABLE copy LIKE original_tableCREATE TABLE copy as select * from original_table

在后一种情况下,仅复制数据,但不复制主键等。 所以我想知道我什么时候更喜欢使用select as

【问题讨论】:

【参考方案1】:

它们做不同的事情。 CREATE TABLE LIKE 创建一个 empty 表,其结构与原始表相同。

CREATE TABLE AS SELECT 将数据插入到新表中。结果表不为空。此外,CREATE TABLE AS SELECT 常用于更复杂的查询,以生成临时表。在这种情况下没有“原始”表。查询的结果只是被捕获为一个表格。

编辑:

进行备份的“标准”方法是使用 . . . . backup 在数据库级别。这将备份数据库中的所有对象。备份多个表很重要,例如,为了维护对象之间的关系完整性。

如果您只想要一个表的真实副本,请先执行create table like,然后执行insert into。但是,这可能会对 auto_increment 字段构成挑战。您可能希望删除列上的 auto_increment 属性,以便填充此类列。

【讨论】:

那么创建表的备份副本的标准方法是什么?【参考方案2】:

当新表不是旧表的精确副本,而是仅包含选定的列或连接产生的列时,通常使用第二种形式。

【讨论】:

【参考方案3】:

当您有复杂的选择时,最有可能使用“Create Table as Select...”

例如:

create table t2 as select * from t1 where x1=7 and y1 <>2 from  t1;

现在,如果您不需要如此复杂的选择,显然您应该使用 Create Like。您也可以使用此语法更改 PI。

【讨论】:

以上是关于何时将 CREATE TABLE AS SELECT 与 CREATE TABLE LIKE?的主要内容,如果未能解决你的问题,请参考以下文章

CREATE Hive TABLE (AS SELECT) 需要 Hive 支持

oracle中,用create table ... as select * from table_a...语句备份或者其他用途会不会产生归档日志,

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

insert table 和create table as 区别

MySQL create table as与create table like对比

MySQL create table as与create table like对比