Hướng dẫn rollback drop table mysql - rollback thả bảng mysql

13.1.37 & NBSP; Tuyên bố bảng cắt ngắn

TRUNCATE [TABLE] tbl_name

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3 làm trống hoàn toàn một bảng. Nó đòi hỏi đặc quyền
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
4. Về mặt logic,
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
5 tương tự như câu lệnh
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 xóa tất cả các hàng hoặc chuỗi các câu lệnh
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
7 và
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
8.

Để đạt được hiệu suất cao,

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
5 bỏ qua phương pháp DML để xóa dữ liệu. Do đó, nó không khiến các yếu tố kích hoạt
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
0 bị bắn, nó không thể được thực hiện cho các bảng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1 với các mối quan hệ khóa nước ngoài của cha mẹ và con cái và nó không thể được quay lại như một hoạt động DML. Tuy nhiên, các hoạt động
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
5 trên các bảng sử dụng công cụ lưu trữ hỗ trợ DDL nguyên tử được cam kết hoặc quay lại hoàn toàn nếu máy chủ dừng trong quá trình hoạt động của chúng. Để biết thêm thông tin, xem Phần & NBSP; 13.1.1, Câu lệnh xác định dữ liệu nguyên tử hỗ trợ.

Mặc dù

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3 tương tự như
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6, nhưng nó được phân loại là một câu lệnh DDL chứ không phải là câu lệnh DML. Nó khác với
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 theo những cách sau:

  • Các hoạt động cắt giảm và tạo lại bảng, nhanh hơn nhiều so với việc xóa từng hàng một, đặc biệt là cho các bảng lớn.

  • Các hoạt động cắt ngắn gây ra một cam kết ngầm, và do đó không thể được quay trở lại. Xem Phần & NBSP; 13.3.3, Các câu lệnh gây ra một cam kết ngầm.

  • Không thể thực hiện các hoạt động cắt ngắn nếu phiên giữ khóa bảng hoạt động.

  • DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    3 không thành công cho bảng
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        tbl_name[.*] [, tbl_name[.*]] ...
        FROM table_references
        [WHERE where_condition]
    
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        FROM tbl_name[.*] [, tbl_name[.*]] ...
        USING table_references
        [WHERE where_condition]
    1 hoặc bảng
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        tbl_name[.*] [, tbl_name[.*]] ...
        FROM table_references
        [WHERE where_condition]
    
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        FROM tbl_name[.*] [, tbl_name[.*]] ...
        USING table_references
        [WHERE where_condition]
    8 nếu có bất kỳ ràng buộc
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        tbl_name[.*] [, tbl_name[.*]] ...
        FROM table_references
        [WHERE where_condition]
    
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        FROM tbl_name[.*] [, tbl_name[.*]] ...
        USING table_references
        [WHERE where_condition]
    9 nào từ các bảng khác tham chiếu bảng. Các ràng buộc khóa nước ngoài giữa các cột của cùng một bảng được cho phép.

  • Các hoạt động cắt không trả về một giá trị có ý nghĩa cho số lượng hàng bị xóa. Kết quả thông thường là các hàng 0 được ảnh hưởng, nên được hiểu là không có thông tin.0 rows affected, which should be interpreted as no information.

  • Miễn là định nghĩa bảng là hợp lệ, bảng có thể được tạo lại dưới dạng bảng trống với

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    3, ngay cả khi các tệp dữ liệu hoặc chỉ mục đã bị hỏng.

  • Bất kỳ giá trị

    DELETE FROM somelog WHERE user = 'jcole'
    ORDER BY timestamp_column LIMIT 1;
    1 nào được đặt lại về giá trị bắt đầu của nó. Điều này đúng ngay cả đối với
    DELETE FROM somelog WHERE user = 'jcole'
    ORDER BY timestamp_column LIMIT 1;
    2 và
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        tbl_name[.*] [, tbl_name[.*]] ...
        FROM table_references
        [WHERE where_condition]
    
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        FROM tbl_name[.*] [, tbl_name[.*]] ...
        USING table_references
        [WHERE where_condition]
    1, thường không sử dụng lại các giá trị trình tự.

  • Khi được sử dụng với các bảng được phân vùng,

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    3 bảo tồn phân vùng; Đó là, các tệp dữ liệu và chỉ mục bị loại bỏ và được tạo lại, trong khi các định nghĩa phân vùng không bị ảnh hưởng.

  • Tuyên bố

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    3 không gọi các kích hoạt
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        tbl_name[.*] [, tbl_name[.*]] ...
        FROM table_references
        [WHERE where_condition]
    
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        FROM tbl_name[.*] [, tbl_name[.*]] ...
        USING table_references
        [WHERE where_condition]
    0.

  • Cắt ngắn một bảng

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        tbl_name[.*] [, tbl_name[.*]] ...
        FROM table_references
        [WHERE where_condition]
    
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
        FROM tbl_name[.*] [, tbl_name[.*]] ...
        USING table_references
        [WHERE where_condition]
    1 bị hỏng được hỗ trợ.

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3 được coi là mục đích ghi nhật ký nhị phân và sao chép là DDL chứ không phải DML, và luôn được ghi lại như một tuyên bố.

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3 Đối với một bảng đóng tất cả các trình xử lý cho bảng được mở bằng
INSERT INTO t_copy SELECT * FROM t WHERE ... ;
0.

Trong MySQL 5.7 trở lên, trên một hệ thống có nhóm đệm lớn và được bật

INSERT INTO t_copy SELECT * FROM t WHERE ... ;
1, hoạt động
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3 có thể gây ra hiệu suất hệ thống giảm tạm thời do quét LRU xảy ra khi xóa các mục nhập chỉ số băm thích ứng của bảng (Bug #68184). Việc ánh xạ lại của
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
5 thành
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
7 và
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
8 trong MySQL 8.0 tránh được quét LRU có vấn đề.

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3 có thể được sử dụng với các bảng tóm tắt SCHEMA hiệu suất, nhưng hiệu ứng là đặt lại các cột tóm tắt thành 0 hoặc
INSERT INTO t_copy SELECT * FROM t WHERE ... ;
7, không phải để loại bỏ các hàng. Xem Phần & NBSP; 27.12.20, Bảng tóm tắt Lược đồ hiệu suất.

Cắt ngắn một bảng

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1 nằm trong một không gian bảng cho mỗi bảng giảm không gian bảng hiện có và tạo một bảng mới. Kể từ MySQL 8.0.21, nếu không gian bảng được tạo bằng phiên bản trước đó và nằm trong thư mục không xác định,
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1 sẽ tạo không gian bảng mới ở vị trí mặc định và ghi cảnh báo sau đây vào nhật ký lỗi: thư mục dữ liệu phải nằm trong một Thư mục đã biết. Vị trí thư mục dữ liệu sẽ bị bỏ qua và tệp sẽ được đưa vào vị trí Datadir mặc định. Các thư mục đã biết là những thư mục được xác định bởi các biến
RENAME TABLE t TO t_old, t_copy TO t;
0,
RENAME TABLE t TO t_old, t_copy TO t;
1 và
RENAME TABLE t TO t_old, t_copy TO t;
2. Để có
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3 tạo không gian bảng ở vị trí hiện tại của nó, hãy thêm thư mục vào cài đặt
RENAME TABLE t TO t_old, t_copy TO t;
2 trước khi chạy
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3.The DATA DIRECTORY location must be in a known directory. The DATA DIRECTORY location will be ignored and the file will be put into the default datadir location. Known directories are those defined by the
RENAME TABLE t TO t_old, t_copy TO t;
0,
RENAME TABLE t TO t_old, t_copy TO t;
1, and
RENAME TABLE t TO t_old, t_copy TO t;
2 variables. To have
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3 create the tablespace in its current location, add the directory to the
RENAME TABLE t TO t_old, t_copy TO t;
2 setting before running
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3.

13.2.2 & NBSP; Xóa tuyên bố

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 là một câu lệnh DML loại bỏ các hàng khỏi bảng.

Một câu lệnh

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 có thể bắt đầu với mệnh đề
RENAME TABLE t TO t_old, t_copy TO t;
8 để xác định các biểu thức bảng phổ biến có thể truy cập trong
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6. Xem phần & nbsp; 13.2.17, với (biểu thức bảng phổ biến).

Cú pháp bảng đơn

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

Câu lệnh

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 xóa các hàng từ
DROP TABLE t_old;
1 và trả về số lượng hàng bị xóa. Để kiểm tra số lượng hàng đã bị xóa, hãy gọi hàm
DROP TABLE t_old;
2 được mô tả trong Phần & NBSP; 12.16, các chức năng thông tin của Hồi giáo.

Mệnh đề chính

Các điều kiện trong mệnh đề

DROP TABLE t_old;
3 tùy chọn xác định các hàng nào sẽ xóa. Không có mệnh đề
DROP TABLE t_old;
3, tất cả các hàng bị xóa.

DROP TABLE t_old;
5 là một biểu thức đánh giá đúng cho mỗi hàng sẽ bị xóa. Nó được chỉ định như được mô tả trong Phần & NBSP; 13.2.11, Tuyên bố chọn.

Nếu mệnh đề

DROP TABLE t_old;
6 được chỉ định, các hàng sẽ bị xóa theo thứ tự được chỉ định. Điều khoản
DROP TABLE t_old;
7 đặt giới hạn về số lượng hàng có thể bị xóa. Các mệnh đề này áp dụng cho các xóa bảng đơn, nhưng không phải là xóa nhiều bảng.

Cú pháp nhiều bàn

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]

Đặc quyền

Bạn cần đặc quyền

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 trên bảng để xóa các hàng khỏi nó. Bạn chỉ cần đặc quyền
DROP TABLE t_old;
9 cho bất kỳ cột nào chỉ được đọc, chẳng hạn như các cột được đặt tên trong mệnh đề
DROP TABLE t_old;
3.

Màn biểu diễn

Khi bạn không cần biết số lượng hàng bị xóa, câu lệnh

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3 là một cách nhanh hơn để trống một bảng so với câu lệnh
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 không có mệnh đề
DROP TABLE t_old;
3. Không giống như
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6,
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
3 không thể được sử dụng trong giao dịch hoặc nếu bạn có khóa trên bàn. Xem Phần & NBSP; 13.1.37, Tuyên bố bảng cắt ngắn và Phần & NBSP; 13.3.6, Bảng khóa và mở khóa Bảng câu lệnh.

Tốc độ xóa các hoạt động cũng có thể bị ảnh hưởng bởi các yếu tố được thảo luận trong Phần & NBSP; 8.2.5.3, Tối ưu hóa các câu lệnh xóa.

Để đảm bảo rằng một câu lệnh

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 đã cho không mất quá nhiều thời gian, mệnh đề
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
7 dành riêng cho MySQL cho
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 Chỉ định số lượng hàng tối đa bị xóa. Nếu số lượng hàng để xóa lớn hơn giới hạn, hãy lặp lại câu lệnh
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 cho đến khi số lượng hàng bị ảnh hưởng nhỏ hơn giá trị
DROP TABLE t_old;
7.

Subqueries

Bạn không thể xóa khỏi bảng và chọn từ cùng một bảng trong một truy vấn con.

Hỗ trợ bảng phân vùng

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 Hỗ trợ lựa chọn phân vùng rõ ràng bằng mệnh đề
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
2, lấy danh sách các tên được phân tách bằng dấu phẩy của một hoặc nhiều phân vùng hoặc phân vùng (hoặc cả hai) để chọn các hàng bị bỏ. Các phân vùng không bao gồm trong danh sách bị bỏ qua. Đưa ra một bảng được phân vùng
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
3 với một phân vùng có tên
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
4, thực thi câu lệnh
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
5 có tác dụng tương tự trên bảng như thực thi
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
6; Trong cả hai trường hợp, tất cả các hàng trong phân vùng
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
4 đều bị loại bỏ.

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
2 có thể được sử dụng cùng với điều kiện
DROP TABLE t_old;
3, trong trường hợp đó điều kiện chỉ được kiểm tra trên các hàng trong các phân vùng được liệt kê. Ví dụ:
DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
0 chỉ xóa các hàng từ phân vùng
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
4 mà điều kiện
DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
2 là đúng; Hàng trong bất kỳ phân vùng nào khác không được kiểm tra và do đó không bị ảnh hưởng bởi
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6.

Điều khoản

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
2 cũng có thể được sử dụng trong các câu lệnh
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 nhiều bảng. Bạn có thể sử dụng tối đa một tùy chọn như vậy cho mỗi bảng có tên trong tùy chọn
DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
6.

Để biết thêm thông tin và ví dụ, xem Phần & NBSP; 24.5, Lựa chọn phân vùng.

Cột tự động

Nếu bạn xóa hàng chứa giá trị tối đa cho cột

DELETE FROM somelog WHERE user = 'jcole'
ORDER BY timestamp_column LIMIT 1;
1, giá trị không được sử dụng lại cho bảng
DELETE FROM somelog WHERE user = 'jcole'
ORDER BY timestamp_column LIMIT 1;
2 hoặc
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1. Nếu bạn xóa tất cả các hàng trong bảng với xóa từ
DROP TABLE t_old;
1 (không có mệnh đề
DROP TABLE t_old;
3) trong chế độ
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
02, chuỗi bắt đầu lại cho tất cả các công cụ lưu trữ ngoại trừ
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1 và
DELETE FROM somelog WHERE user = 'jcole'
ORDER BY timestamp_column LIMIT 1;
2. Có một số ngoại lệ đối với hành vi này đối với các bảng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1, như đã thảo luận trong Phần & NBSP; 15.6.1.6, Xử lý Auto_increment trong Innodb.DELETE FROM
DROP TABLE t_old;
1
(without a
DROP TABLE t_old;
3 clause) in
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
02 mode, the sequence starts over for all storage engines except
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1 and
DELETE FROM somelog WHERE user = 'jcole'
ORDER BY timestamp_column LIMIT 1;
2. There are some exceptions to this behavior for
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1 tables, as discussed in Section 15.6.1.6, “AUTO_INCREMENT Handling in InnoDB”.

Đối với các bảng

DELETE FROM somelog WHERE user = 'jcole'
ORDER BY timestamp_column LIMIT 1;
2, bạn có thể chỉ định cột thứ cấp
DELETE FROM somelog WHERE user = 'jcole'
ORDER BY timestamp_column LIMIT 1;
1 trong phím nhiều cột. Trong trường hợp này, việc tái sử dụng các giá trị bị xóa khỏi đầu chuỗi xảy ra ngay cả đối với các bảng
DELETE FROM somelog WHERE user = 'jcole'
ORDER BY timestamp_column LIMIT 1;
2. Xem Phần & NBSP; 3.6.9, Sử dụng Auto_increment.

Sửa đổi

Câu lệnh

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 hỗ trợ các công cụ sửa đổi sau:

  • Nếu bạn chỉ định công cụ sửa đổi

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    10, máy chủ sẽ trì hoãn việc thực thi
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    6 cho đến khi không có máy khách nào khác đọc từ bảng. Điều này chỉ ảnh hưởng đến các công cụ lưu trữ chỉ sử dụng khóa cấp bảng (chẳng hạn như
    DELETE FROM somelog WHERE user = 'jcole'
    ORDER BY timestamp_column LIMIT 1;
    2,
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    13 và
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    14).

  • Đối với các bảng

    DELETE FROM somelog WHERE user = 'jcole'
    ORDER BY timestamp_column LIMIT 1;
    2, nếu bạn sử dụng công cụ sửa đổi
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    16, công cụ lưu trữ không hợp nhất các chỉ số chỉ số trong quá trình xóa, điều này có thể tăng tốc một số loại hoạt động xóa.

  • Công cụ sửa đổi

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    17 khiến MYSQL bỏ qua các lỗi không thể tin được trong quá trình xóa hàng. (Lỗi gặp phải trong giai đoạn phân tích cú pháp được xử lý theo cách thông thường.) Các lỗi bị bỏ qua do sử dụng
    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    17 được trả về dưới dạng cảnh báo. Để biết thêm thông tin, hãy xem ảnh hưởng của việc bỏ qua đối với việc thực thi tuyên bố.

Thứ tự xóa

Nếu câu lệnh

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 bao gồm mệnh đề
DROP TABLE t_old;
6, các hàng sẽ bị xóa theo thứ tự được chỉ định bởi mệnh đề. Điều này hữu ích chủ yếu kết hợp với
DROP TABLE t_old;
7. Ví dụ: câu lệnh sau đây tìm thấy các hàng khớp với mệnh đề
DROP TABLE t_old;
3, sắp xếp chúng bằng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
23 và xóa cái đầu tiên (lâu đời nhất):

DELETE FROM somelog WHERE user = 'jcole'
ORDER BY timestamp_column LIMIT 1;

DROP TABLE t_old;
6 cũng giúp xóa các hàng theo thứ tự cần thiết để tránh vi phạm toàn vẹn tham chiếu.

Bàn innodb

Nếu bạn đang xóa nhiều hàng từ một bảng lớn, bạn có thể vượt quá kích thước bảng khóa cho bảng

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1. Để tránh vấn đề này, hoặc đơn giản là để giảm thiểu thời gian mà bảng vẫn bị khóa, chiến lược sau (hoàn toàn không sử dụng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6) có thể hữu ích:

  1. Chọn các hàng không bị xóa vào một bảng trống có cùng cấu trúc với bảng gốc:not to be deleted into an empty table that has the same structure as the original table:

    INSERT INTO t_copy SELECT * FROM t WHERE ... ;
  2. Sử dụng

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    27 để di chuyển bảng gốc một cách nguyên tử ra khỏi đường và đổi tên bản sao thành tên gốc:

    RENAME TABLE t TO t_old, t_copy TO t;
  3. Thả bảng ban đầu:

    DROP TABLE t_old;

Không có phiên nào khác có thể truy cập các bảng liên quan trong khi

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
27 thực thi, vì vậy hoạt động đổi tên không phải chịu các vấn đề đồng thời. Xem Phần & NBSP; 13.1.36, Tuyên bố Đổi tên Bảng.

Bàn myisam

Trong các bảng

DELETE FROM somelog WHERE user = 'jcole'
ORDER BY timestamp_column LIMIT 1;
2, các hàng bị xóa được duy trì trong danh sách được liên kết và các hoạt động
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
30 tiếp theo tái sử dụng các vị trí hàng cũ. Để đòi lại không gian không sử dụng và giảm kích thước tệp, hãy sử dụng câu lệnh
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
31 hoặc tiện ích Myisamchk để sắp xếp lại các bảng.
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
31 dễ sử dụng hơn, nhưng Myisamchk nhanh hơn. Xem phần & nbsp; 13.7.3.4, Tối ưu hóa bảng câu lệnh bảng, và phần & nbsp; 4.6.4, Myisamchk-tiện ích bảo trì bảng myisam.myisamchk utility to reorganize tables.
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
31 is easier to use, but myisamchk is faster. See Section 13.7.3.4, “OPTIMIZE TABLE Statement”, and Section 4.6.4, “myisamchk — MyISAM Table-Maintenance Utility”.

Công cụ sửa đổi

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
16 có ảnh hưởng đến việc liệu lá chỉ mục được hợp nhất để xóa các hoạt động hay không.
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
34 hữu ích nhất cho các ứng dụng trong đó các giá trị chỉ mục cho các hàng bị xóa được thay thế bằng các giá trị chỉ mục tương tự từ các hàng được chèn vào sau. Trong trường hợp này, các lỗ hổng còn lại bởi các giá trị bị xóa được sử dụng lại.

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
34 không hữu ích khi các giá trị bị xóa dẫn đến các khối chỉ mục bị thiếu hụt một loạt các giá trị chỉ mục mà các chèn mới lại xảy ra. Trong trường hợp này, việc sử dụng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
16 có thể dẫn đến không gian lãng phí trong chỉ số vẫn chưa được báo cáo. Dưới đây là một ví dụ về một kịch bản như vậy:

  1. Tạo một bảng chứa cột

    DELETE FROM somelog WHERE user = 'jcole'
    ORDER BY timestamp_column LIMIT 1;
    1 được lập chỉ mục.

  2. Chèn nhiều hàng vào bàn. Mỗi phần chèn kết quả trong một giá trị chỉ mục được thêm vào cấp cao của chỉ mục.

  3. Xóa một khối các hàng ở đầu thấp của phạm vi cột bằng cách sử dụng

    DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
        [PARTITION (partition_name [, partition_name] ...)]
        [WHERE where_condition]
        [ORDER BY ...]
        [LIMIT row_count]
    34.

Trong kịch bản này, các khối chỉ mục được liên kết với các giá trị chỉ mục đã bị xóa trở nên thiếu hụt nhưng không được hợp nhất với các khối chỉ mục khác do sử dụng

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
16. Chúng vẫn bị thiếu khi chèn mới xảy ra, bởi vì các hàng mới không có giá trị chỉ mục trong phạm vi bị xóa. Hơn nữa, chúng vẫn được lấp đầy ngay cả khi sau này bạn sử dụng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 mà không cần
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
16, trừ khi một số giá trị chỉ số bị xóa xảy ra trong các khối chỉ mục trong hoặc liền kề với các khối bị thiếu. Để đòi lại không gian chỉ mục không sử dụng trong những trường hợp này, hãy sử dụng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
31.

Nếu bạn định xóa nhiều hàng từ một bảng, có thể sử dụng

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
34 nhanh hơn, sau đó là
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
31. Điều này xây dựng lại chỉ mục thay vì thực hiện nhiều hoạt động hợp nhất khối chỉ mục.

Xóa đa bàn

Bạn có thể chỉ định nhiều bảng trong câu lệnh

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 để xóa các hàng khỏi một hoặc nhiều bảng tùy thuộc vào điều kiện trong mệnh đề
DROP TABLE t_old;
3. Bạn không thể sử dụng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
47 hoặc
DROP TABLE t_old;
7 trong
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 nhiều bảng. Điều khoản
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
50 liệt kê các bảng liên quan đến tham gia, như được mô tả trong Phần & NBSP; 13.2.11.2, Điều khoản tham gia.

Đối với cú pháp nhiều bảng đầu tiên, chỉ các hàng khớp từ các bảng được liệt kê trước mệnh đề

DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
6 bị xóa. Đối với cú pháp nhiều bảng thứ hai, chỉ khớp các hàng từ các bảng được liệt kê trong mệnh đề
DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
6 (trước mệnh đề
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
53) bị xóa. Hiệu ứng là bạn có thể xóa các hàng từ nhiều bảng cùng một lúc và có thêm các bảng chỉ được sử dụng để tìm kiếm:

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

Hoặc:

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

Các câu lệnh này sử dụng cả ba bảng khi tìm kiếm các hàng để xóa, nhưng chỉ xóa các hàng khớp chỉ từ các bảng

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
54 và
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
55.

Các ví dụ trước sử dụng

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
56, nhưng các câu lệnh
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 nhiều bảng có thể sử dụng các loại tham gia khác được phép trong các câu lệnh
DROP TABLE t_old;
9, chẳng hạn như
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
59. Ví dụ: để xóa các hàng tồn tại trong
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
54 không phù hợp trong
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
55, sử dụng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
59:

DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;

Cú pháp cho phép

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
63 sau mỗi
DROP TABLE t_old;
1 để tương thích với quyền truy cập.Access.

Nếu bạn sử dụng câu lệnh

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 nhiều bảng liên quan đến các bảng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1 có các ràng buộc chính của nước ngoài, trình tối ưu hóa MySQL có thể xử lý các bảng theo thứ tự khác với mối quan hệ cha mẹ/trẻ em của họ. Trong trường hợp này, tuyên bố thất bại và quay trở lại. Thay vào đó, bạn nên xóa khỏi một bảng duy nhất và dựa vào các khả năng
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
0 mà
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]
1 cung cấp để khiến các bảng khác được sửa đổi phù hợp.

Ghi chú

Nếu bạn khai báo bí danh cho một bảng, bạn phải sử dụng bí danh khi đề cập đến bảng:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
0

Bí danh bảng trong một bảng nhiều bảng

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 chỉ nên được khai báo trong phần
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
50 của câu lệnh. Ở những nơi khác, tài liệu tham khảo bí danh được cho phép nhưng không phải là khai báo bí danh.

Chính xác:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
1

Không đúng:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
2

Bí danh bảng cũng được hỗ trợ cho các câu lệnh

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
6 bắt đầu bằng MySQL 8.0.16. (Lỗi #89410, lỗi #27455809)