Trong ví dụ này, hãy sử dụng một bảng trông như thế này "
CREATE TABLE parent_data
(
id int not null auto_increment,
...
PRIMARY KEY (id)
);
Nếu bạn muốn xóa mềm, hãy tạo bảng ẩn id của các hàng bạn muốn xóa. Có lẽ một cái gì đó như thế này:
CREATE TABLE deleted_parent_data SELECT id FROM parent_data WHERE 1=2;
ALTER TABLE deleted_parent_data ADD PRIMARY KEY (id);
Giả sử bạn muốn xóa các hàng 10,20,30,40,50. Chỉ cần chạy này:
INSERT IGNORE INTO deleted_parent_data VALUES (10),(20),(30),(40),(50);
Bạn sẽ luôn phải thực hiện INNER THAM GIA để xem dữ liệu hợp lệ
SELECT A.* FROM parent_data A
INNER JOIN deleted_parent_data B
USING (id) WHERE B.id IS NULL;
Nhìn thấy các hàng bị xóa sẽ rất nhanh
SELECT B.* FROM deleted_parent_data A
LEFT JOIN parent_data B
USING (id) WHERE B.id IS NOT NULL;
Để khôi phục hàng 20 trong Parent_data, chỉ cần chạy
DELETE FROM deleted_parent_data WHERE id = 20;
Để xóa vĩnh viễn các hàng 20 và 50, bạn chạy hai bước mà bạn không thể quay lại:
DELETE B.* FROM
(SELECT id FROM deleted_parent_data
WHERE id IN (20,50)) A
LEFT JOIN parent_data B
USING (id) WHERE B.id IS NOT NULL;
DELETE FROM deleted_parent_data WHERE id IN (20,50);
Nếu bạn có các bản ghi con trong bảng child_data, bạn sẽ phải có một bảng xóa_child_data riêng và quản lý nó theo cách tương tự. Có lẽ có bảng trông như thế này:
CREATE TABLE deleted_child_table SELECT parent_id,id WHERE 1=2;
ALTER TABLE deleted_child_table ADD PRIMARY KEY (id);
ALTER TABLE deleted_child_table ADD UNIQUE KEY (parent_id,id);
Bạn có thể có thể sử dụng các kích hoạt hoặc các ràng buộc FOREIGN KEY giữa remove_parent_table và remove_child_table với tất cả các ON DELETE CASCADE
chuông và còi. Theo cách đó, việc xóa hàng vĩnh viễn trong remove_parent_table sẽ xếp tầng thành remove_child_table.