Thả nhiều bảng trong một lần trong mysql


102

Cách bỏ nhiều bảng từ một cơ sở dữ liệu duy nhất bằng một lệnh. cái gì đó như,

> use test; 
> drop table a,b,c;

trong đó a, b, c là các bảng từ kiểm tra cơ sở dữ liệu.


17
bạn đã tự trả lời
ajreal

Theo các câu trả lời bên dưới, trong HeidiSQL, bạn có thể lọc các bảng theo tên của chúng (hộp văn bản phía trên), viết DROP TABLE vào một truy vấn và nhấp đúp vào từng bảng mong muốn để thêm tên của nó vào truy vấn (đặt dấu phẩy giữa chúng) rồi nhấn F9 để thực thi. Một chút lạc đề nhưng tôi đến đây vì điều đó.
Biệt thự Ivan Ferrer

Đối với những người muốn bỏ một số bảng có cùng tiền tố, vì DROP TABLE table_prefix_*không hoạt động với ký tự dấu sao: stackoverflow.com/questions/6758652/…
baptx

Câu trả lời:


135

Thí dụ:

Giả sử bảng A có hai con B và C. Sau đó, chúng ta có thể sử dụng cú pháp sau để loại bỏ tất cả các bảng.

DROP TABLE IF EXISTS B,C,A;

Điều này có thể được đặt ở đầu script thay vì bỏ từng bảng riêng lẻ.


29
Có lẽ cần chỉ ra rằng các bảng không cần phải có bất kỳ mối quan hệ nào cả. Chúng có thể hoàn toàn độc lập và cú pháp này sẽ vẫn hoạt động.
crmpicco

76
SET foreign_key_checks = 0;
DROP TABLE IF EXISTS a,b,c;
SET foreign_key_checks = 1;

Sau đó, bạn không phải lo lắng về việc thả chúng theo đúng thứ tự, cũng như liệu chúng có thực sự tồn tại hay không.

NB điều này chỉ dành cho MySQL (như trong câu hỏi). Các cơ sở dữ liệu khác có thể có các phương pháp khác nhau để thực hiện việc này.


3
Bạn đã cứu tôi khỏi rất nhiều rắc rối bằng cách chuyển các kiểm tra fkey (y).
HungryCoder

0

Một cách lười biếng để làm điều này nếu có rất nhiều bảng bị xóa.

  1. Nhận bảng bằng cách sử dụng bên dưới

    • Đối với máy chủ sql - SELECT CONCAT (name, ',') Table_Name FROM SYS.tables;
    • Đối với miệng - CHỌN CONCAT (TABLE_NAME, ',') TỪ SYS.ALL_TABLES;
  2. Sao chép và dán tên bảng từ tập hợp kết quả và dán nó sau lệnh DROP.


-3
declare @sql1 nvarchar(max) 
SELECT @sql1 =
  STUFF(
         (
           select ' drop table dbo.[' + name + ']'

           FROM sys.sysobjects AS sobjects
           WHERE (xtype = 'U') AND (name LIKE 'GROUP_BASE_NEW_WORK_%')
           for xml path('')
        ),
     1, 1, '')

  execute sp_executesql @sql1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.