Хорошо, я решил это сам здесь хранимая процедура :)
BEGIN
DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE truncatestmnt TEXT; -- this is where the truncate statement will be retrieved from cursor
-- This is the magic query that will bring all the table names from the database
DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName";
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
OPEN c1;
c1_loop: LOOP
FETCH c1 INTO truncatestmnt;
IF `done` THEN LEAVE c1_loop; END IF;
SET @x = truncatestmnt;
PREPARE stm1 FROM @x;
EXECUTE stm1;
END LOOP c1_loop;
CLOSE c1;
END
То, что я делаю свое призвание все таблицы из данной базы данных это поможет, если таблицы внутри данной базы данных не имеют шаблонов.
Так, вызвав DECLARE c1 CURSOR FOR SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = "@DatabaseName";
и сохранение результатов в курсор можно извлечь все TRUNCATE TABLE x
заявления, порожденные «п» количество таблиц в данной базе данных, затем просто подготовка и выполнение каждого оператора в курсоре будет укоротить все таблицы внутри данной базы данных.
BTW @DatabaseName должен быть передан как параметр хранимой процедуры
Надеется, что это помогает кто-то другое тоже :)
Alex
Проблема, которую я вижу, заключается в том, что она не будет обрабатывать отношения внешних ключей. Поэтому при попытке обрезания таблицы, на которую ссылается другая таблица, она не сработает. –
Вы абсолютно правы, любые идеи о том, как с ними справиться? – dalexsoto
Единственный способ, с помощью которого можно было бы удалить ограничения и воссоздать их все после TRUNCATE – dalexsoto