Anda dapat mengetahui apakah itu ada di sana terlebih dahulu, dengan SELECT
dengan url
, atau Anda dapat membuat url
bidang unik:
CREATE TABLE IF NOT EXISTS kompas_url
...
url VARCHAR(1000) UNIQUE,
...
)
Ini akan menghentikan MySQL dari memasukkan baris duplikat, tetapi juga akan melaporkan kesalahan saat Anda mencoba dan memasukkan. Ini tidak baik—walaupun kita bisa menangani kesalahannya, itu mungkin menyamarkan orang lain. Untuk menyiasatinya, kami menggunakan ON DUPLICATE KEY UPDATE
sintaks:
INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()
Ini memungkinkan kami untuk memberikan UPDATE
pernyataan dalam kasus nilai duplikat dalam bidang unik (ini dapat mencakup kunci utama Anda). Dalam hal ini, kami mungkin ingin memperbarui modified_date
bidang dengan tanggal saat ini.
EDIT: Seperti yang disarankan oleh ~unutbu
, jika Anda tidak ingin mengubah apa pun pada duplikat, Anda dapat menggunakan INSERT IGNORE
sintaksis. Ini hanya berfungsi sebagai berikut:
INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
Ini hanya mengubah jenis kesalahan tertentu menjadi peringatan—yang paling berguna, kesalahan yang menyatakan akan ada entri unik duplikat. Jika Anda menempatkan kata kunci IGNORE
ke dalam pernyataan Anda, Anda tidak akan mendapatkan kesalahan—kueri akan dibuang begitu saja. Dalam kueri yang kompleks, ini juga dapat menyembunyikan kesalahan lain yang mungkin berguna, jadi sebaiknya pastikan dua kali lipat kode Anda benar jika Anda ingin menggunakannya.