Tôi muốn thả nhiều bảng một cách dễ dàng mà không thực sự liệt kê các tên bảng trong truy vấn thả và các bảng bị xóa có tiền tố nói 'wp_'MySQL: làm cách nào để thả nhiều bảng bằng truy vấn đơn lẻ?
Trả lời
Chỉ cần chia sẻ một trong những giải pháp:
mysql> SELECT CONCAT( "DROP TABLE ",
GROUP_CONCAT(TABLE_NAME) ) AS stmtFROM information_schema.TABLES
WHERE TABLE_SCHEMA = "your_db_name" AND TABLE_NAME LIKE "ur condition" into outfile '/tmp/a.txt';
mysql> source /tmp/a.txt;
Tôi đã sử dụng một truy vấn rất giống với Angelin. Trong trường hợp bạn có nhiều hơn một vài bảng, một bảng phải tăng độ dài tối đa là group_concat
. Nếu không, truy vấn sẽ chặn trên chuỗi bị cắt bớt mà trả về group_concat
.
Đây là 10 tôi cent:
-- Increase memory to avoid truncating string, adjust according to your needs
SET group_concat_max_len = 1024 * 1024 * 10;
-- Generate drop command and assign to variable
SELECT CONCAT('DROP TABLE ',GROUP_CONCAT(CONCAT(table_schema,'.',table_name)),';') INTO @dropcmd FROM information_schema.tables WHERE table_schema='databasename' AND table_name LIKE 'my_table%';
-- Drop tables
PREPARE str FROM @dropcmd; EXECUTE str; DEALLOCATE PREPARE str;
+1 Tôi đồng ý với kịch bản –
Cảm ơn bạn vì điều này - không có sự gia tăng group_concat_max_len, câu trả lời của Angelin sẽ không bao giờ có tác dụng đối với kịch bản của tôi. –
+1 không sử dụng tệp n biến n deallocating –
giải pháp đơn giản mà không có nguy cơ lỗi:
mysqldump
tạo ra một tập tin có chứa DROP
lệnh như
DROP TABLE IF EXISTS `wp_matable`;
một 'grep
' với " DROP TABLE wp_
"cung cấp cho chúng tôi các lệnh để thực thi
để thả được thực hiện bởi dây chuyền luận trhee (bạn có thể chỉnh sửa drop.sql để kiểm tra bảng sẽ bị loại bỏ trước)
mysqldump -u user -p database > dump.sql
grep "DROP TABLE `wp_" dump.sql > drop.sql
mysql -u user -p database < drop.sql
Thả bảng duy nhất trong mysql:
DROP TABLE TABLE_NAME;
Đối với giải pháp mysqldump lớn nó tốt hơn để sử dụng tùy chọn --skip-quote-tên
mysqldump --skip-quote-names -u user -p database > dump.sql
grep "DROP TABLE wp_" dump.sql > drop.sql
mysql -u user -p database < drop.sql
Bạn thoát khỏi backticks trong tên bảng. Phần grep sẽ không hoạt động trong một số môi trường với backticks.
Hãy cẩn thận với "_", cần phải được viết với "\" trước đây trong Mysql như:
SELECT CONCAT('DROP TABLE',GROUP_CONCAT(CONCAT(table_schema,'.',table_name)),';') INTO @dropcmd FROM information_schema.tables WHERE table_schema='databasename' AND table_name LIKE '**my\\_table**%';
Đến c: \ xampp \ mysql \ data \ thư mục của bạn
Chọn nhiều bảng mà bạn muốn loại bỏ và sau đó nhấn nút xóa
Cảm ơn
Điều này làm cho giả định rằng áp phích ban đầu đang sử dụng XAMPP và đã cài đặt nó vào thư mục đó. –
I có thể biết tại sao bỏ phiếu ve –
câu hỏi tương tự - http://stackoverflow.com/questions/4958424/mysql-question-on-dropping- bảng/54301 04 # 5430104 – Devart