Как правильно обрезать таблицы?

Я использую datamapper с ruby ​​для хранения данных в определенных таблицах.

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

Я изначально попробовал Forum.all.destroy и сделал это для всех разных таблиц, но заметил, что некоторые из них просто удалены из phpmyadmin. я могу только представить его из-за внешних ключей. Хотя я действительно не знаю, потому что моя другая таблица, которая удалила ключи, была успешно удалена. Не говоря уже о том, что id скорее всего "ноль", так что ключи не доходят до необычайно больших чисел (например, номер # 500 000).

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

До сих пор я...

adapter = DataMapper.repository(:default).adapter
adapter.execute('TRUNCATE TABLE `forums`, `dates`, `remarks`');

Это было бы хорошо, если бы не синтаксис mysql. так что первое, что

Я сделал это 1 на 1 в phpmyadmin, и когда я сделал это, он сказал

Cannot truncate a table referenced in a foreign key constraint

Ответ 1

План A:

SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checking.
TRUNCATE TABLE forums;
TRUNCATE TABLE dates;
TRUNCATE TABLE remarks;
SET FOREIGN_KEY_CHECKS = 1; -- Enable foreign key checking.

План B:

Вы должны сначала обрезать дочерние таблицы, а затем родительские таблицы.

Отключение внешнего ключа проверяет риски ввода строк в ваши таблицы, которые не соответствуют ограничениям, которые могут вызывать поведение undefined.

Ответ 2

Вместо использования Отключить проверку внешнего ключа.

Вы можете использовать приведенный ниже код.

DELETE FROM forums;
ALTER TABLE forums AUTO_INCREMENT = 1;

DELETE FROM dates;
ALTER TABLE dates AUTO_INCREMENT = 1;

DELETE FROM remarks;
ALTER TABLE remarks AUTO_INCREMENT = 1;

Он просто удалит все строки и увеличит идентификатор от 1 до.