Прежде всего, не доверяют table_rows
в INFORMATION_SCHEMA.TABLES. Это оценка , это неточно. Как это могло быть точным, учитывая, что в любой момент могут быть транзакции, не допущенные, чтобы вставлять или удалять строки? Количество строк в таблице может включать или не включать эти изменения.
Во-вторых, оператор DROP TABLE
поддерживает только фиксированный список таблиц, которые нужно удалить. Вот синтаксис ссылки из http://dev.mysql.com/doc/refman/5.7/en/drop-table.html:
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
Это утверждение не поддерживает пункт WHERE
или каких-либо условий. Вы должны явно указать таблицы.
Вы должны разработать привычку читать документацию, чтобы узнать, какой синтаксис поддерживается. Это самая большая жалоба на вопросы о переполнении стека: слишком много людей пропускают чтение справочной документации. 90% или более вопросов здесь не понадобятся, если они это сделают.
Как комментарии @Barmar выше, вы можете prepare a dynamic SQL statement со списком таблиц, которые вы хотите удалить.
В-третьих, сброс неопределенного набора таблиц очень опасен. Вы можете сбросить неправильные таблицы из-за ошибки в коде, который находит таблицы, соответствующие критериям. Это обязательно создаст катастрофу потери данных, из которой невозможно восстановить. Я никогда не «автоматизирую» падение таблиц.
Нет нет нет нет нет нет нет – RiggsFolly
Вам нужно будет написать динамический SQL в хранимой процедуре. – Barmar