Saya ingin menambahkan satu baris untuk tabel database, tetapi jika baris yang ada dengan sama kunci unik yang saya inginkan untuk memperbarui baris.
Misalnya,
insert into table (id, name, age) values(1, "A", 19)
Katakanlah kunci unik adalah id
, dan di database saya ada turut dengan id = 1
. Dalam hal ini saya ingin untuk memperbarui baris tersebut dengan nilai-nilai ini. Biasanya ini memberikan kesalahan. Jika saya menggunakan insert MENGABAIKAN
itu akan mengabaikan kesalahan, tapi itu masih tidak update.
Gunakan INSERT ... ON DUPLICATE KEY UPDATE
PERTANYAAN:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
Check out MENGGANTI
http://dev.mysql.com/doc/refman/5.0/en/replace.html
REPLACE into table (id, name, age) values(1, "A", 19)
Ketika menggunakan batch insert menggunakan sintaks berikut:
INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
name = VALUES (name),
...
Coba ini:
INSERT INTO tabel (id,nama,umur) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',usia='21'
Catatan:
Di sini jika id adalah primary key kemudian setelah penyisipan pertama dengan id='1'
setiap kali mencoba untuk memasukkan id='1'
akan update nama dan usia dan sebelumnya nama usia akan berubah.
INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);
INSERT INTO TABLE (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE NAME = "A", AGE = 19;
REPLACE INTO table (id, name, age) VALUES(1, "A", 19);
Semua solusi ini akan bekerja mengenai pertanyaan anda.
Jika anda ingin tahu secara detail mengenai pernyataan ini kunjungi link ini
Ketika menggunakan SQLite:
REPLACE into table (id, name, age) values(1, "A", 19)
Asalkan id
adalah kunci utama. Atau yang lain itu hanya sisipan baris lain. Melihat INSERT (SQLite).
Hanya karena aku di sini mencari solusi tapi untuk memperbarui dari yang lain identik terstruktur tabel (dalam kasus saya website tes DB untuk hidup DB):
INSERT live-db.table1
SELECT *
FROM test-db.table1 t
ON DUPLICATE KEY UPDATE
ColToUpdate1 = t.ColToUpdate1,
ColToUpdate2 = t.ColToUpdate2,
...
Seperti yang disebutkan di tempat lain, hanya kolom yang ingin anda perbarui harus disertakan setelah ON DUPLICATE KEY UPDATE
.
Tidak perlu daftar kolom di INSERT
atau PILIH
, meskipun saya setuju itu's mungkin praktek yang lebih baik.
Dalam kasus saya saya buat di bawah ini pertanyaan pertama, query jika id
1 sudah ada dan usia yang sudah ada, setelah itu jika anda membuat permintaan pertama tanpa usia
dari nilai age
akan ada
REPLACE into table SET `id` = 1, `name` = 'A', `age` = 19
untuk menghindari masalah di atas membuat query seperti di bawah ini
INSERT INTO table SET `id` = '1', `name` = 'A', `age` = 19 ON DUPLICATE KEY UPDATE `id` = "1", `name` = "A",`age` = 19
mungkin itu akan membantu anda ...