代码之家  ›  专栏  ›  技术社区  ›  Robbie

快速向mysql表添加列的副本

  •  25
  • Robbie  · 技术社区  · 15 年前

    我需要一种快速的方法在表中复制datetime列并给它一个新名称。

    我的表中有一个名为mydate的列称为myresults,我需要一个查询来生成表中名为newdate的新列,该列的数据与mydate列的数据完全相同。

    有没有比做一个新列,然后复制所有数据(这是一个大表,我正在寻找最快的方法)的两步方法更快的方法?

    显而易见的解决方案:

     ALTER TABLE `myResults` ADD `newDate` DATETIME;  
     UPDATE `myResults` SET `newDate` = `myDate`;
    
    4 回复  |  直到 6 年前
        1
  •  18
  •   Daniel Vassallo    15 年前

    不幸的是,显而易见的解决方案是唯一的解决方案。

    但是请注意,一般情况下,您不应该在关系数据库中复制列。

        2
  •  13
  •   animuson    13 年前
    UPDATE `table_name` SET `new_column` = `existing_column` WHERE `id`=`id`
    
        3
  •  2
  •   Evan Carroll    15 年前

    为什么您的工作负载需要一个新的datetime列来复制另一列数据?这听起来像是可怕的练习?告诉我们你想达到的目标怎么样?您可以通过几种不同的方式使用相同的数据拉取第二列,而无需实际复制数据:

    SELECT date1 AS date_old, date1 AS date_new FROM table;
    

    -或者-,可以创建 看法

    CREATE VIEW virtual_table AS
        SELECT date1 AS date_old, date1 AS date_new FROM table
    ;
    SELECT * FROM virtual_table;
    
        4
  •  1
  •   Matt    15 年前

    如果你只需要一个默认值,你可以选择什么默认值是静态的或使用函数调用。

    ALTER TABLE `myResults` ADD `newDate` DATETIME DEFAULT '2010-01-01';
    

    ALTER TABLE `myResults` ADD `newDate` DATETIME DEFAULT current_timestamp;