Ответ 1
Очевидным решением является, к сожалению, единственное решение.
Однако обратите внимание, что в общем случае вы не должны копировать столбец в реляционных базах данных.
Мне нужен быстрый способ дублировать столбец DATETIME в таблице и дать ему новое имя.
У меня есть столбец с именем myDate в моей таблице с именем myResults, мне нужен запрос, чтобы создать новый столбец в таблице с именем newDate, который имеет те же данные, что и столбец myDate.
Есть ли более быстрый способ сделать это, чем сделать очевидный двухэтапный подход сделать новый столбец, а затем скопировать все данные (это большая таблица, и я ищу самый быстрый подход)?
Очевидное решение:
ALTER TABLE `myResults` ADD `newDate` DATETIME; UPDATE `myResults` SET `newDate` = `myDate`;
Очевидным решением является, к сожалению, единственное решение.
Однако обратите внимание, что в общем случае вы не должны копировать столбец в реляционных базах данных.
UPDATE `table_name` SET `new_column` = `existing_column` WHERE `id`=`id`
Почему ваша рабочая нагрузка когда-либо требовала нового столбца 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;
Если вам просто нужен дефолт, вы можете либо выбрать статическое значение по умолчанию, либо использовать вызов функции.
ALTER TABLE `myResults` ADD `newDate` DATETIME DEFAULT '2010-01-01';
или
ALTER TABLE `myResults` ADD `newDate` DATETIME DEFAULT current_timestamp;