DELETE
câu lệnh có thể được sử dụng để xóa dữ liệu trong bảng.
WHERE
mệnh đề có thể được sử dụng để chỉ định chính xác hàng nào sẽ bị xóa.
Bạn có thể xóa tất cả các hàng, một số hàng hoặc không có hàng nào, tùy thuộc vào các điều kiện lọc được áp dụng bởi WHERE
mệnh đề.
Xóa đơn giản
Trước tiên, hãy tìm một nghệ sĩ để xóa:
sqlite> SELECT * FROM Artists; ArtistId ArtistName Bio -------- -------------------- ---------------------------------------- 1 Joe Satriani 2 Steve Vai 3 The Tea Party 4 Noiseworks 5 Wayne Jury 6 Mr Percival 7 Iron Maiden 8 Atmasphere Australian jazz band centred around poly 9 Ian Moss 10 Magnum 11 Strapping Young Lad 12 Slayer 13 Primus 14 Pat Metheny 15 Frank Gambale 16 Mothers of Invention 17 The Wiggles
Được rồi, hãy xóa số nghệ sĩ 12 (Kẻ giết người).
Đây là câu lệnh xóa đơn giản xóa bản ghi đó khỏi Artists bảng:
DELETE FROM Artists WHERE ArtistId = 12;
Vì vậy, sau khi chạy, chúng tôi có thể xác minh rằng bản ghi trên thực tế đã bị xóa bằng SELECT
tuyên bố:
sqlite> SELECT * FROM Artists WHERE ArtistId = 12; sqlite>
(Không có kết quả).
Xóa dữ liệu có ràng buộc khóa ngoại
Nếu bạn cố gắng xóa một bản ghi được tham chiếu bởi khóa ngoại, bạn sẽ gặp lỗi. Trước tiên, bạn cần xóa bản ghi khóa ngoại trước khi xóa bản ghi khóa chính.
Ví dụ:ID nghệ sĩ 17 (từ Artists bảng) tình cờ được tham chiếu bởi hai bản ghi trong Album bảng (xem ArtistId cột):
sqlite> SELECT * FROM Albums WHERE ArtistId = 17; AlbumId AlbumName ReleaseDate ArtistId -------- -------------------- ------------ ------------ 5 Yummy Yummy 1994 17 13 Big Red Car 1995 17
Vì vậy, nếu chúng tôi cố gắng xóa nghệ sĩ 17 từ bảng Nghệ sĩ (chứa khóa chính), chúng tôi sẽ gặp lỗi.
Đây là câu lệnh xóa:
DELETE FROM Artists WHERE ArtistId = 17;
Và đây là kết quả:
sqlite> DELETE FROM Artists ...> WHERE ArtistId = 17; Error: FOREIGN KEY constraint failed sqlite>
Vì vậy, chúng ta cần xóa các bản ghi khóa ngoại trước khi xóa khóa chính.
Nếu bạn không nhận được
ràng buộc NGOẠI KHÓA, không thành công
thông báo, bạn có thể cần bật kiểm tra ràng buộc khóa ngoại. Chạy PRAGMA foreign_keys = ON;
để bật kiểm tra ràng buộc khóa ngoại.
Xóa các bản ghi được liên kết
Vì vậy, hãy xóa các bản ghi được liên kết trong Album trước khi thử lại câu lệnh xóa ở trên.
DELETE FROM Albums WHERE ArtistId = 17;
Kiểm tra xem chúng đã bị xóa chưa:
sqlite> SELECT * FROM Albums WHERE ArtistId = 17; sqlite>
(Không có kết quả).
Bây giờ, hãy thử lại câu lệnh xóa ban đầu:
DELETE FROM Artists WHERE ArtistId = 17;
Có vẻ hứa hẹn - không có lỗi:
sqlite> DELETE FROM Artists ...> WHERE ArtistId = 17; sqlite>
Và một SELECT
tuyên bố xác nhận việc xóa:
sqlite> SELECT * FROM Artists WHERE ArtistId = 17; sqlite>
Không có kết quả.
Xóa tất cả các Hàng
Bạn có thể xóa tất cả các hàng trong bảng bằng cách bỏ qua WHERE
mệnh đề.
Chúng tôi có một bàn dự phòng ( Albums1 ), vì vậy hãy thử nó trên cái đó.
Đầu tiên, hãy kiểm tra xem nó có thực sự chứa dữ liệu không:
sqlite> SELECT * FROM Albums1; AlbumId AlbumName Year ArtistId -------- -------------------- ------------ ------------ 1 Killers 1981 7 2 Powerslave 1984 7 3 Surfing with the Ali 1987 1 4 Heavy as a Really He 1995 11 5 Yummy Yummy 1994 17 6 Out of the Loop 2007 6 7 Suck on This 1989 13 8 Pork Soda 1993 13 9 Sailing the Seas of 1991 13 10 Flying in a Blue Dre 1989 1 11 Black Swans and Worm 2010 1 12 Somewhere in Time 1986 7 13 Big Red Car 1995 17
Nó có. Vì vậy, hãy tiếp tục và xóa tất cả:
DELETE FROM Albums1;
Bây giờ chúng ta hãy kiểm tra lại nội dung của nó:
sqlite> SELECT * FROM Albums1; sqlite>
(Không có kết quả).