【问题标题】:Creating table with LIKE or SELECT Clause and CONSTRAINTS behavior?使用 LIKE 或 SELECT 子句和 CONSTRAINTS 行为创建表?
【发布时间】:2013-12-09 10:26:09
【问题描述】:

我的问题特别是关于我们使用 LIKE 运算符或在 SELECT 子句的帮助下创建表的克隆或更具体的副本的方法,还从旧表中复制所有约束?

    CREATE TABLE newTable LIKE oldTable;

    CREATE TABLE newTable AS (SELECT * FROM oldTable) WITH NO DATA;

请解释上述这些语句是否会从 oldTable 创建确切的工作克隆,或者它只会从 oldTable 为 newTable 创建结构。

当我说克隆时,我希望它必须创建 oldTable 的新工作副本,该副本将应用所有约束。例如,对于我的 TIMESTAMP 列,其定义如下所示。

    LAST_UPDATE_TS TIMESTAMP NOT NULL GENERATED BY DEFAULT FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP;

我的 newTable 的 LAST_UPDATE_TS 是否会像在 oldTable 中一样工作?

对于每一列,我们可以有几种情况和类型的约束,因此稍后或在创建表之后手动应用所有这些约束,如上所述,这并不是一个好的选择。请解释。谢谢:)

【问题讨论】:

    标签: sql database copy clone create-table


    【解决方案1】:

    据我了解,这个怎么样?

    SELECT TMP.* INTO DESTINATION_TABLE
    FROM
    (SELECT * FROM SOURCE_TABLE WHERE 1=0) AS TMP
    

    这有效并从现有表结构创建新的空表结构。

    现在关于约束,我们将执行以下步骤,

    1]

    create table pk (id int primary key);
    

    2]

    sp_help pk
    

    3]

    select * into fk from (select * from pk) as tmp
    

    4]

    sp_help fk
    

    【讨论】:

    • 谢谢阿迪亚。这是完美的,肯定会奏效。我的问题实际上是在这一点之后开始的。一旦我们创建了这个表。该表在所有约束下都能正常工作吗?因为它与旧桌子一起工作?还是我们需要自己添加一次约束?
    • 嗨超人,如何测试表的创建并检查结果。然后你肯定知道它是否会起作用。顺便说一句,有些工具可以从现有数据库创建 ddl。您可以使用 ddl 创建新表。
    猜你喜欢
    • 2014-09-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2013-10-11
    相关资源
    最近更新 更多