UPDATE AggregatedData SET datenum="734152.979166667",
Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667";
Ini berfungsi jika datenum
ada, tetapi saya ingin memasukkan data ini sebagai baris baru jika datenum
tidak ada.
MEMPERBARUI
datenum itu unik tapi itu bukan kunci utama
Jawaban:
Jai benar yang harus Anda gunakan
INSERT ... ON DUPLICATE KEY UPDATE
.Perhatikan bahwa Anda tidak perlu menyertakan datenum dalam klausa pembaruan karena ini adalah kunci unik, jadi tidak boleh berubah. Anda perlu memasukkan semua kolom lain dari tabel Anda. Anda dapat menggunakan
VALUES()
fungsi ini untuk memastikan nilai yang tepat digunakan saat memperbarui kolom lain.Ini pembaruan Anda yang ditulis ulang menggunakan
INSERT ... ON DUPLICATE KEY UPDATE
sintaks yang tepat untuk MySQL:sumber
UNIQUE
batasanTimestamp
dengan menggunakanALTER TABLE AggregatedData ADD UNIQUE (Timestamp)
Coba gunakan ini :
sumber
Saya mengalami situasi di mana saya perlu memperbarui atau menyisipkan pada tabel sesuai dengan dua bidang (keduanya kunci asing) di mana saya tidak dapat mengatur batasan UNIK (jadi INSERT ... ON DUPLICATE KEY UPDATE tidak akan berfungsi). Inilah yang akhirnya saya gunakan:
Contoh ini diambil dari salah satu database saya, dengan parameter input (dua nama dan angka) diganti dengan [hasher_name], [hash_name], dan [new_value]. SELECT ... LIMIT 1 yang bersarang menarik yang pertama dari record yang ada atau record baru (last_recogs.id adalah kunci primer autoincrement) dan menggunakannya sebagai masukan nilai ke REPLACE INTO.
sumber