Хорошо, я решил сам, вот хранимая процедура:)
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
, сгенерированные количеством n таблиц в данной базе данных, затем просто подготовить и выполнить каждый оператор в курсоре будет обрезать все таблицы в данной базе данных.
BTW @DatabaseName должно быть указано в качестве параметра хранимой процедуры
Надеюсь, это поможет кому-то еще:)
Alex