Усечение всех таблиц (большинство из которых имеют ограничения). Как временно удалить их

У меня есть база данных разработки (MYSQL), которую я бы хотел загрузить со свежими данными в какой-то момент. Я хотел бы удалить содержимое всех таблиц. Каким образом можно максимально автоматизировать удаление содержимого всех таблиц (включая те, которые имеют ограничения внешнего ключа). Есть ли усечение all/drop все эквивалентные ограничения?

Спасибо

Ответы

Ответ 1

Я думаю, вы можете сделать следующее:

  • Отключить проверку ограничения внешнего ключа

    mysql> SET FOREIGN_KEY_CHECKS = 0;
    
  • Усечь ваши таблицы

    mysql> TRUNCATE MY_TABLE;
    
  • Включить проверку ограничения внешнего ключа

    mysql> SET FOREIGN_KEY_CHECKS = 1;
    

Я предпочитаю временно отключать ограничения внешнего ключа, чтобы отбросить/воссоздать их.

Ответ 2

Если вы хотите, чтобы урезать ДЕЙСТВИТЕЛЬНО все таблицы лучше, я думаю, что отбросьте и создайте базу данных с ранее извлеченной схемой базы данных. Или вы просто можете копировать одну и ту же базу данных - тест и пустой. После заполнения ваших таблиц просто удалите тестовый db и скопируйте пустой для проверки.

Ответ 3

TRUNCATE (TABLE) tbl_name усекает единую таблицу. Вы можете придерживаться этого в script и прокручивать его со всеми вашими именами таблиц.

http://dev.mysql.com/doc/refman/5.0/en/truncate.html

Возможно, вы захотите также изучить миграцию, но я думаю, что у Алексея есть правильный подход. Это очень похоже на то, как RoR обрабатывает перестройку тестовой базы данных при каждом запуске.

Ответ 4

Вот что я делаю из командной строки:

 mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "SET FOREIGN_KEY_CHECKS = 0; TRUNCATE table $table" DATABASE_NAME; done

Проблема в том, что если вам требуется аутентификация, вам нужно будет добавить -u YOUR_USERNAME -pYOURPASSWORD после обеих команд mysql.

Если вы не хотите вводить пароль в командной строке (я никогда не был), вам нужно будет скопировать и вставить пароль после каждого приглашения, которое может быть несколько раз в зависимости от количества таблицы.