2010-07-01 29 views
12

Có thể cắt bớt tất cả các bảng trong cơ sở dữ liệu mysql không? truy vấn đó là gì.cắt ngắn tất cả các bảng trong cơ sở dữ liệu mysql

+0

thể trùng lặp của [Truncate tất cả các bảng trong một cơ sở dữ liệu MySQL trong một lệnh?] (Http://stackoverflow.com/questions/1912813/truncate-all-tables-in-a-mysql-database -in-one-command) –

Trả lời

6

Bạn có thể làm truy vấn này:

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

Sau đó lưu kết quả vào một kịch bản và chạy nó.

khả năng khác có thể được,

  1. Chạy truy vấn
  2. Sao chép kết quả vào clipboard (COPY)
  3. Dán kết quả vào các lệnh thông dịch MySQL (PASTE)

Làm xong.

Nếu bạn chỉ chạy truy vấn, bạn sẽ hiểu những gì tôi đang cố gắng nói.

+0

xin lỗi nhưng, tôi không thể hiểu được tuyên bố của bạn, lưu kết quả vào một tập lệnh và chạy nó. – chetan

+0

OK, hãy thực hiện việc này. Tôi sẽ cập nhật câu hỏi. –

3

Không thể sử dụng truy vấn sql đơn lẻ.

+2

Mà có lẽ là một điều tốt. –

8

Tiếp tục từ ống @Pablo không concatenating đối với tôi - và tôi muốn để hạn chế nó vào một cơ sở dữ liệu duy nhất và sau đó chỉ bảng

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

Tôi có cùng một vấn đề mà các đường ống không nối (MySQL 5.6.15). Điều này làm việc cho tôi. – nagu

2

Ở đây tôi để lại cho bạn một thủ tục lưu trữ để thiết lập lại cơ sở dữ liệu của bạn để 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; 
5

Bạn chỉ cần chọn tất cả các bảng và sau đó chọn cắt bớt tất cả.

enter image description here

+0

Điều này thực sự hữu ích. Cảm ơn nhiều. Tôi đang tìm loại giải pháp này và nó cũng là ứng dụng trong mysqlworkbench. –

Các vấn đề liên quan