Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL DELETE untuk Pemula

Artikel ini berisi DELETE SQL dasar pernyataan yang dapat digunakan pemula untuk menghapus data dari tabel database mereka.

Menghapus Satu Baris

Berikut adalah contoh dasar dari SQL DELETE pernyataan.

DELETE FROM Owners
WHERE OwnerId = 5;

Dalam hal ini kami menghapus baris di mana OwnerId kolom memiliki nilai 4 .

DELETE pernyataan dimulai dengan DELETE FROM , diikuti dengan nama tabel (yaitu tabel yang berisi data yang ingin Anda hapus).

Dalam beberapa Sistem Manajemen Basis Data (DBMS), kode FROM kata kunci bersifat opsional, tetapi sebaiknya menyertakannya untuk portabilitas yang lebih baik (jika Anda perlu menjalankan kode yang sama pada DBMS yang berbeda).

Anda harus selalu menyertakan WHERE klausa, kecuali jika Anda ingin menghapus semua baris dari tabel.

Ya, Anda membacanya dengan benar. Menghilangkan WHERE klausa akan menghapus semua baris dalam tabel.

Sebagian besar DBMS memiliki berbagai opsi lain yang dapat Anda gunakan dengan DELETE pernyataan, tetapi yang tercantum di sini adalah yang paling umum digunakan.

Perhatikan bahwa DELETE pernyataan menghapus seluruh baris. Anda tidak dapat menghapus nilai kolom individual dalam satu baris. Untuk melakukan ini, gunakan SQL UPDATE pernyataan.

Contoh

Dalam contoh ini, kami menghapus data dari sebuah tabel.

Pertama-tama, mari kita lihat apa yang ada di tabel.

SELECT * FROM Owners;

Hasil:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Stallone   | (489) 591-0408 | NULL              |
| 4         | Boris       | Biden      | (349) 611-8908 | [email protected] |
| 5         | Woody       | Eastwood   | (308) 555-0112 | [email protected] |
+-----------+-------------+------------+----------------+-------------------+

Oke kita hapus pemilik nomor 5, lalu pilih tabel lagi.

DELETE FROM Owners
WHERE OwnerId = 5;

SELECT * FROM Owners;

Hasil:

+-----------+-------------+------------+----------------+-------------------+
| OwnerId   | FirstName   | LastName   | Phone          | Email             |
|-----------+-------------+------------+----------------+-------------------|
| 1         | Homer       | Connery    | (308) 555-0100 | [email protected] |
| 2         | Bart        | Pitt       | (231) 465-3497 | [email protected]  |
| 3         | Nancy       | Stallone   | (489) 591-0408 | NULL              |
| 4         | Boris       | Biden      | (349) 611-8908 | [email protected] |
+-----------+-------------+------------+----------------+-------------------+

Kita dapat melihat bahwa baris terakhir telah dihapus seperti yang ditentukan.

Kunci Asing

Anda mungkin mendapatkan kesalahan jika mencoba menghapus data yang direferensikan oleh kunci asing di tabel lain. Ini karena tabel yang Anda coba hapus datanya adalah tabel induk dalam suatu hubungan. Tabel dengan kunci asing (tabel anak) bergantung pada data di tabel induk (yaitu data yang Anda coba hapus).

Apakah Anda mendapatkan kesalahan atau tidak akan tergantung pada bagaimana kunci asing dikonfigurasi. Kebanyakan DBMS mendukung berbagai pilihan untuk menghadapi situasi ini. Opsi tersebut dapat mencakup, memunculkan kesalahan, mengalirkan penghapusan ke tabel kunci asing (yaitu menghapus baris dari tabel anak), menyetel kunci asing ke NULL , atau menyetelnya ke nilai default.

Berikut ini contoh mencoba menghapus baris yang direferensikan oleh kunci asing.

DELETE FROM Owners
WHERE OwnerId = 3;

Hasil:

Msg 547, Level 16, State 0, Line 1
The DELETE statement conflicted with the REFERENCE constraint "FK_Pets_Owners". The conflict occurred in database "PetHotel", table "dbo.Pets", column 'OwnerId'.

The statement has been terminated.

Dalam hal ini, kesalahan muncul, dan baris tidak dihapus.

Dalam contoh ini, Owners.OwnerId kolom adalah kunci utama dari tabel ini. Tabel lain bernama Pets memiliki OwnerId kolom yang mereferensikan kolom kunci utama ini, dan dalam hal ini, setidaknya ada satu baris yang mereferensikan nomor pemilik 3.

Jika saya benar-benar ingin menghapus baris ini, saya perlu memperbarui data di tabel anak sehingga tidak ada baris yang mengarah ke pemilik ini. Entah itu, atau memodifikasi kunci asing sehingga menggunakan opsi yang berbeda ketika operasi penghapusan terjadi pada kunci utama. Memodifikasi kunci asing bisa menjadi pilihan yang tidak diinginkan, tergantung pada apa yang perlu Anda lakukan. Bergantung pada DBMS Anda, mungkin juga perlu menghapus kunci yang ada dan membuatnya kembali.

Bagaimanapun, kesalahan ini adalah hal yang baik, karena mengingatkan kita akan masalah yang akan kita hadapi jika kita menghapus baris ini. Ini membantu menegakkan integritas referensial.

Hati-hati! Lupa kode WHERE Klausa

DELETE pernyataan bisa menjadi pernyataan yang sangat berbahaya. Jika Anda menghilangkan WHERE klausa, Anda akan menghapus semua baris dalam tabel.

Untungnya, Anda mungkin diselamatkan oleh batasan kunci asing jika Anda mencoba menghapus data dari tabel induk suatu hubungan.

Tapi bagaimana jika tidak. Bagaimana jika tidak ada kesalahan yang ditimbulkan oleh pernyataan penghapusan Anda?

Mari cari tahu!

Mari kita jalankan DELETE lainnya pernyataan, tapi kali ini kita akan lupa untuk memasukkan WHERE ayat. Selain itu, kali ini kita akan menjalankannya terhadap tabel yang bukan merupakan parent dalam suatu hubungan.

Pertama, mari kita lihat apa yang ada di tabel.

SELECT * FROM Pets;

Hasil:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Oke, jadi kita punya delapan hewan peliharaan. Kita sebenarnya dapat melihat bahwa tiga hewan peliharaan dimiliki oleh pemilik nomor 3 – pemilik yang kita coba hapus pada contoh sebelumnya. Inilah mengapa kami mendapatkan kesalahan.

Bagaimanapun, mari kita lanjutkan dan jalankan DELETE our pernyataan tanpa WHERE klausa, lalu periksa tabel lagi

DELETE FROM Pets;

SELECT * FROM Pets;

Hasil:

(8 rows affected)
(0 rows affected)

(8 rows affected) bagian berarti delapan baris telah dihapus.

(0 rows affected) part berarti tidak ada baris yang dipilih (karena tidak ada baris dalam tabel.

Ups!

Mungkin ada saat-saat di mana Anda sebenarnya perlu menghapus semua baris dalam tabel. Bergantung pada ukuran tabel, hanya pernyataan ini yang Anda butuhkan.

Jika Anda perlu menghapus tabel yang lebih besar, ada juga TRUNCATE TABLE , yang menghapus semua baris dari tabel atau partisi tabel tertentu, tanpa mencatat penghapusan baris individual (DELETE pernyataan mencatat penghapusan ini).

Oleh karena itu, TRUNCATE TABLE lebih cepat dan menggunakan lebih sedikit sumber daya sistem dan log transaksi.

Contoh penggunaan TRUNCATE TABLE :

TRUNCATE TABLE Owners;

Perhatikan bahwa ini mungkin tidak berfungsi jika tabel direferensikan oleh batasan kunci asing, bahkan jika tidak ada baris anak. Dalam kasus seperti itu, DELETE dapat bekerja sebagai gantinya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ETL vs ELT:Kami Memposisikan, Anda Menilai

  2. Model Data untuk Melacak Kepemilikan Anda yang Paling Berharga

  3. Mengganti Kursor SQL dengan Alternatif untuk Menghindari Masalah Kinerja

  4. Melewati tabel Data sebagai Parameter ke Prosedur Tersimpan

  5. ) Operator untuk Pemula