Функция / Процедура удаления таблиц по дате без удаления системных таблиц - PullRequest
0 голосов
/ 16 мая 2019

Как объяснено в заголовке выше, я пытаюсь написать функцию sql для удаления таблиц по дате без удаления системных таблиц. Я поместил изображение под этим сообщением для визуальной интерпретации моей проблемы. Любая помощь будет оценена! Спасибо за ваше время! enter image description here

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Я работаю над этим решением:

CREATE DEFINER = root @ localhost PROCEDURE Delete_Tables () НАЧАЛО SET SESSION group_concat_max_len = 1000000;

SET @tables = NULL;SELECT GROUP_CONCAT ('', table_schema, '. ', table_name, '') INTO @tables FROM information_schema.tables WHERE table_schema = 'testschema' AND CREATE_TIME> '19 / 05/2019 ';

CASE WHEN ISNULL (@tables)Затем выберите «Обнаружено пустое значение» в качестве подтверждения;ELSE SET @tables = CONCAT ('DROP TABLE', @tables);выберите @tables;ПОДГОТОВЬТЕ stmt1 ОТ @tables;EXECUTE stmt1;ПОДГОТОВКА ДЕАЛЛОКАЦИИ stmt1;КОНЕЦ ДЕЛА;END

Спасибо за помощь!

0 голосов
/ 17 мая 2019

Вы можете получить список таблиц, запросив INFORMATION_SCHEMA.TABLES.Его можно отфильтровать по схеме и по времени создания.

SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE CREATE_TIME [criteria]
AND TABLE_SCHEMA [criteria]
;

Поскольку вы, кажется, не обращаетесь к схеме "mysql", когда упоминаете "системные" таблицы, вам, вероятно, потребуется разработать условие table_nameдля вышеупомянутого запроса, чтобы исключить эти таблицы.

Получив эти результаты, вы можете использовать процедурный код для динамического создания запросов для УДАЛЕНИЯ этих таблиц.Вы не можете динамически отбрасывать эти таблицы одним запросом ... но этот запрос можно изменить, чтобы сгенерировать запросы для вас:

SELECT CONCAT('DROP TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`;') AS dropQuery
FROM INFORMATION_SCHEMA.TABLES 
... and so on.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...