Можем ли мы создать таблицу с суффиксом метки времени в имени таблицы в MySQL

#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;