Можно ли обрезать всю таблицу в базе данных 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;