MASUKKAN KE DALAM atau KEMASKINI dengan Keadaan Berganda
Pertimbangkan jadual yang menjejaki data untuk berbilang entiti, yang dikenal pasti mengikut nama dan tarikh. Setiap hari, baris baharu dijana dengan tarikh masa hadapan untuk senarai terhingga nilai nama. Matlamatnya adalah untuk memasukkan baris baharu jika tidak wujud atau mengemas kini baris sedia ada jika ada.
Penyelesaian biasa mungkin merupakan prosedur tersimpan yang menyemak keadaan, tetapi ini tidak dapat dilaksanakan kerana data ditolak daripada bahasa lain.
Penyelesaian: INSERT ON DUPLICATE KEY KEMASKINI
Ciri MySQL INSERT ON DUPLICATE KEY UPDATE menyediakan penyelesaian yang elegan untuk masalah ini. Ia membenarkan anda memasukkan baris baharu jika ia tidak wujud atau mengemas kini baris sedia ada jika ada, berdasarkan kunci atau indeks unik.
Dalam kes ini, kunci unik komposit dihidupkan (nama, tarikh) sudah memadai. Apabila sisipan dicuba, MySQL akan mengesan konflik disebabkan oleh kunci unik ini dan sebaliknya melakukan kemas kini.
Contoh:
CREATE TABLE myThing ( id INT AUTO_INCREMENT PRIMARY KEY, name INT NOT NULL, values1 INT NOT NULL, values2 INT NOT NULL, dates DATE NOT NULL, UNIQUE KEY (name, dates) ); INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2 = values2 + 1;
Dengan melakukan berbilang sisipan dengan nilai (nama, tarikh) yang sama, anda boleh mengemas kini lajur nilai2 sewajarnya:
INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2 = values2 + 1; INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2 = values2 + 1;
Keputusan:
SELECT * FROM myThing; +----+------+---------+---------+------------+ | id | name | values1 | values2 | dates | +----+------+---------+---------+------------+ | 1 | 777 | 1 | 3 | 2015-07-11 | +----+------+---------+---------+------------+
Seperti yang anda lihat, klausa INSERT ON DUA KUNCI KEMAS KINI secara berkesan mengemas kini lajur nilai2 untuk baris sedia ada.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memasukkan atau Kemas Kini Baris Dengan Cekap Berdasarkan Kunci Komposit dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!