Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memasukkan atau Kemas Kini Baris Dengan Cekap Berdasarkan Kunci Komposit dalam MySQL?

Bagaimanakah Saya Boleh Memasukkan atau Kemas Kini Baris Dengan Cekap Berdasarkan Kunci Komposit dalam MySQL?

Patricia Arquette
Lepaskan: 2024-12-29 18:36:11
asal
376 orang telah melayarinya

How Can I Efficiently Insert or Update Rows Based on a Composite Key in MySQL?

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;
Salin selepas log masuk

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;
Salin selepas log masuk

Keputusan:

SELECT *
FROM myThing;

+----+------+---------+---------+------------+
| id | name | values1 | values2 | dates      |
+----+------+---------+---------+------------+
| 1  | 777  | 1       | 3       | 2015-07-11 |
+----+------+---------+---------+------------+
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan