Masukkan ke dalam tabel MySQL atau update jika ada

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.

Mengomentari pertanyaan (3)
Larutan

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
Komentar (23)

Check out MENGGANTI

http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE into table (id, name, age) values(1, "A", 19)
Komentar (7)

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),
    ...
Komentar (0)

Mencoba ini:

INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;

Semoga ini bisa membantu.

Komentar (6)

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.

Komentar (3)
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

Komentar (3)

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).

Komentar (5)

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.

Komentar (0)

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 ...

Komentar (1)

Dalam kasus ini, anda ingin membuat lapangan lama (Bagi ex: nama). Permintaan akan:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    
name=name, age=19;
Komentar (0)
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;

Juga jangan lupa untuk memperhatikan tentang unik key constraint.

ALTER TABLE `table` ADD UNIQUE `unique_key` ( `id` ) 
Komentar (1)