Apakah ada cara mudah untuk INSERT
baris ketika tidak ada, atau UPDATE
jika ada, menggunakan satu permintaan MySQL?
sql
mysql
insert-update
upsert
blub
sumber
sumber
MERGE
. Secara umum, konsep ini sering disebut sebagai"UPSERT"
.geb
dantopic
itu akan berfungsi (ALTER TABLE table ADD UNIQUE geb_by_topic (geb, topic)
).MERGE
tapi saya tidak yakin apakah sintaksnya identik dengan SQL Server.NULL
, untuk membiarkanauto_increment
perilaku berfungsi (yang sebaliknya, ya, berfungsi seperti yang Anda duga ; lihat dev.mysql.com/doc/refman/5.5/en/example-auto-increment. html ).VALUES(col)
untuk mendapatkan nilai dari argumen insert jika ada duplikat. Contoh:ON DUPLICATE UPDATE b = VALUES(b), c = VALUES(c)
Saya tahu ini adalah pertanyaan lama, tetapi Google membawa saya ke sini baru-baru ini, jadi saya membayangkan orang lain juga datang ke sini.
@chaos benar: ada
INSERT ... ON DUPLICATE KEY UPDATE
sintaksnya.Namun, pertanyaan awal ditanyakan tentang MySQL secara khusus, dan di MySQL ada
REPLACE INTO ...
sintaksisnya. IMHO, perintah ini lebih mudah dan lebih mudah digunakan untuk upert. Dari manual:Perhatikan ini bukan SQL standar. Contoh dari manual:
Sunting: Hanya peringatan wajar yang
REPLACE INTO
tidak disukaiUPDATE
. Seperti yang dikatakan manual,REPLACE
hapus baris jika ada, lalu sisipkan yang baru. (Catat lucu "2 baris yang terpengaruh" dalam contoh di atas.) Artinya, itu akan menggantikan nilai semua kolom dari catatan yang ada (dan tidak hanya memperbarui beberapa kolom.) Perilaku MySQLREPLACE INTO
mirip dengan SqliteINSERT OR REPLACE INTO
. Lihat pertanyaan ini untuk beberapa solusi jika Anda hanya ingin memperbarui beberapa kolom (dan tidak semua kolom) jika catatan sudah ada.sumber