#mysql #sql
#mysql #sql
Вопрос:
Я пытаюсь создать таблицу в MySQL, в которой в имени таблицы должен быть суффикс метки времени. Я пытаюсь выполнить следующую команду SQL для достижения того же.
Попытка 1. — create table somename-NOW() (id integer, title varchar(100));
Попытка 2. — create table somename-@NOW() (id integer, title varchar(100));
Приведенные выше команды у меня не сработали.
Спасибо
Комментарии:
1. Вы можете использовать
prepared statement
для этого2. Я делаю это в рабочей среде, я могу сделать это, используя только команды, код не задействован
3. Помимо всего прочего, минус в имени идентификатора недопустим, если не отмечен обратным знаком.
4. Я не знаю, каков ваш вариант использования, но вы можете захотеть взглянуть на разделение . Схема, которую вы хотите реализовать, становится очень сложной в обслуживании.
5. Это звучит как действительно плохая идея. В одном из редких случаев я скопировал таблицу с меткой времени для анализа. Однако такие таблицы обычно не создаются в производственной среде или на регулярной основе.
Ответ №1:
Это кажется действительно плохой идеей. Я бы посоветовал вам вставить в одну таблицу дополнительный столбец:
create table somename (
id integer,
title varchar(100),
loadtime datetime default now(),
key (loadtime, id)
);
Затем вы можете загрузить в эту таблицу и разделить пакеты, используя loadtime
столбец. Другие возможности, такие как разделение, также могут быть полезны.
Комментарии:
1. Да, действительно, но у нас был вариант использования для этого, но ваш кажется идеальным и имеет полный смысл.
Ответ №2:
set @your_date = now();
SET @sql = CONCAT("CREATE TABLE ",@your_date," as SELECT * FROM db1.table1");
PREPARE stmt from @sql;
EXECUTE stmt;
Ответ №3:
Используйте Prepared Statement
для того же.
Примечание: Используйте a backtick
, чтобы убедиться, что это недопустимый идентификатор. Кроме того, если вы просто используете NOW()
его, он вернется YYYY-MM-DD HH:ii:ss
, между датой и временем есть пробел, и это будет проблемой для любого запроса, поэтому вы можете отформатировать его в удобном имени, которое вы хотите, используя DATE_FORMAT
function.
SET @s:= CONCAT('create table `somename_', DATE_FORMAT(NOW(), '%y_%m_%dt%H_%i_%s'), '` (id integer, title varchar(100))');
PREPARE stmt3 FROM @s;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;