Обрезать всю таблицу в базе данных mysql

Можно ли обрезать всю таблицу в базе данных mysql? для чего это запрос.

Ответ 1

Вы можете выполнить этот запрос:

select 'truncate table ' || table_name || ';' 
  from INFORMATION_SCHEMA.TABLES;

Затем сохраните результаты в script и запустите его.

Другая возможность может быть,

  • Запустить запрос
  • Скопировать результаты в буфер обмена (COPY)
  • Вставить результаты в интерпретатор команд MySQL (PASTE)

Готово.

Если вы просто запустите запрос, вы поймете, что я пытаюсь сказать.

Ответ 2

Продолжение с трубками @Pablo не было для меня конкатенированием - и я хотел ограничить его одной базой данных, а затем только таблицами

SELECT CONCAT('truncate table ',table_name,';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '<<YOUR-DB-NAME>>'
AND TABLE_TYPE = 'BASE TABLE';

Ответ 3

Вы можете просто выбрать все таблицы, а затем выбрать усечение всех.

введите описание изображения здесь

Ответ 4

Невозможно использовать один SQL-запрос.

Ответ 5

Здесь я оставляю вам хранимую процедуру для reset вашей базы данных в cero

CREATE DEFINER=`root`@`localhost` PROCEDURE `reset_database`(DB_NAME VARCHAR(100))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tableName VARCHAR(100);
DECLARE cur CURSOR FOR SELECT table_name FROM INFORMATION_SCHEMA.tables WHERE table_schema = DB_NAME AND table_type = 'BASE TABLE';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

SET FOREIGN_KEY_CHECKS = 0;
read_loop: LOOP
FETCH cur INTO tableName;
  IF done THEN LEAVE read_loop; END IF;
  SET @s = CONCAT('truncate table ',tableName);
  PREPARE stmt1 FROM @s;
  EXECUTE stmt1;
  DEALLOCATE PREPARE stmt1;
END LOOP;
SET FOREIGN_KEY_CHECKS = 1;

CLOSE cur;
END;