0Pricing
SQL Academy · Pelajaran

DELETE dengan USING dan Pola Aman

Hapus baris yang digabungkan dengan tabel lain menggunakan DELETE ... USING, dan gunakan transaksi + SELECT terlebih dahulu untuk memverifikasi sebelum operasi yang merusak data.

DELETE dengan USING dan Pola Aman adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

DELETE Dasar

Hapus baris yang cocok:

DELETE FROM users WHERE id = 1;

Selalu Uji dengan SELECT Terlebih Dahulu

Sebelum melakukan DELETE, jalankan WHERE yang sama dengan SELECT untuk mengonfirmasi jumlah baris:

SELECT COUNT(*) FROM orders
WHERE status = 'cancelled' AND created_at < NOW() - INTERVAL '1 year';

DELETE dalam Transaksi

Bungkus operasi destruktif dalam transaksi agar Anda dapat melakukan ROLLBACK:

BEGIN;
DELETE FROM orders WHERE status = 'cancelled' AND ...;
SELECT COUNT(*) FROM orders;       -- sanity check
-- COMMIT;  or ROLLBACK;

DELETE Tanpa WHERE Adalah Bencana

DELETE FROM users; mengosongkan tabel. Tidak ada tombol untuk membatalkannya. Bersikaplah sangat waspada; satu detik tambahan untuk mengetikkan WHERE adalah perlindungan yang murah.

DELETE … USING (Penghapusan JOIN PostgreSQL)

Hapus baris dalam satu tabel berdasarkan tabel lain:

DELETE FROM orders o
USING users u
WHERE u.id = o.user_id
  AND u.is_banned = true;

DELETE dengan Subkueri

Alternatif standar:

DELETE FROM orders
WHERE user_id IN (SELECT id FROM users WHERE is_banned);

Kaskade FOREIGN KEY

Jika orders.user_id memiliki ON DELETE CASCADE, penghapusan pengguna secara otomatis menghapus pesanannya. Praktis, tetapi berbahaya — gunakan dengan hemat.

ALTER TABLE orders
  ADD CONSTRAINT orders_user_fk
  FOREIGN KEY (user_id) REFERENCES users(id)
  ON DELETE CASCADE;

Penghapusan Lunak

Banyak aplikasi sebenarnya tidak menghapus baris — aplikasi tersebut menetapkan stempel waktu deleted_at:

UPDATE users SET deleted_at = NOW() WHERE id = $1;

-- Every query then has:
WHERE deleted_at IS NULL

Membersihkan Data Lama

Untuk pembersihan berkala pada tabel besar, hapus data secara berkelompok agar terhindar dari transaksi yang berjalan lama:

DELETE FROM events
WHERE id IN (
  SELECT id FROM events
  WHERE created_at < NOW() - INTERVAL '90 days'
  LIMIT 10000
);
-- run this in a loop until it returns 0 rows

TRUNCATE: Saat Kecepatan Penting

Jika Anda benar-benar ingin menghapus seluruh isi tabel, TRUNCATE lebih cepat daripada DELETE karena tidak memindai baris. Namun, TRUNCATE tidak menjalankan pemicu ROW dan tidak dapat dibatalkan dengan ROLLBACK pada semua konfigurasi:

TRUNCATE TABLE staging_orders;
TRUNCATE TABLE staging_orders RESTART IDENTITY CASCADE;

RETURNING dari DELETE

Dapatkan kembali baris yang dihapus — berguna untuk pengarsipan:

WITH deleted AS (
  DELETE FROM orders WHERE status = 'archived' RETURNING *
)
INSERT INTO orders_archive SELECT * FROM deleted;

Ringkasan

DELETE adalah pernyataan yang paling berbahaya. Pola defensif:

  • Jalankan SELECT terlebih dahulu
  • Gunakan BEGIN; ... ; ROLLBACK sebagai uji coba
  • Lakukan penghapusan besar secara berkelompok
  • Utamakan penghapusan lunak untuk data yang terlihat oleh pengguna
  • Gunakan TRUNCATE hanya pada tabel penahapan

Pemeriksaan Singkat

Anda menjalankan DELETE FROM users; tanpa WHERE. Apa yang Anda lakukan?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “DELETE dengan USING dan Pola Aman” gratis?

Ya — teks lengkap “DELETE dengan USING dan Pola Aman” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “DELETE dengan USING dan Pola Aman”?

Hapus baris yang digabungkan dengan tabel lain menggunakan DELETE ... USING, dan gunakan transaksi + SELECT terlebih dahulu untuk memverifikasi sebelum operasi yang merusak data. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “DELETE dengan USING dan Pola Aman” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. INSERT dengan Banyak Baris
  2. UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
  3. UPDATE dengan FROM dan Pembaruan Bergaya JOIN
  4. DELETE dengan USING dan Pola Aman
← Kembali ke SQL Academy