何时将 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_table
和CREATE 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 区别