Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencegah Penambahan Auto pada Sisipan MySQL Pendua?

Bagaimana untuk Mencegah Penambahan Auto pada Sisipan MySQL Pendua?

Barbara Streisand
Barbara Streisandasal
2024-11-19 11:36:02940semak imbas

How to Prevent Auto-Incrementing on Duplicate MySQL Inserts?

Mencegah Penambahan Automatik pada Sisipan Duplikat MySQL

Apabila memasukkan baris pendua ke dalam jadual dengan lajur kenaikan automatik, kenaikan automatik kaunter boleh terus meningkat walaupun sisipan diabaikan. Ini boleh membawa kepada nilai kenaikan automatik yang salah atau malah dilangkau.

Dalam MySQL, tingkah laku ini disebabkan oleh fakta bahawa kaunter kenaikan automatik ditambah apabila pertanyaan sisipan dilaksanakan, tanpa mengira hasilnya. Untuk menangani isu ini, terdapat beberapa penyelesaian yang mungkin:

Menggunakan Pertanyaan Sisipan Diubahsuai:

Salah satu pendekatan ialah mengubah suai pertanyaan sisipan untuk hanya menambah pembilang jika baris belum ada. Ini boleh dicapai menggunakan gabungan klausa INSERT IGNORE dan LIMIT:

INSERT IGNORE INTO tablename (tag)
SELECT $tag
FROM tablename
WHERE NOT EXISTS(
    SELECT tag
    FROM tablename
    WHERE tag = $tag
)
LIMIT 1;

Pertanyaan ini hanya akan melaksanakan sisipan dan menambah pembilang autokenaikan jika baris dengan teg yang ditentukan belum wujud.

Menggunakan Pencetus:

Pilihan lain ialah menggunakan pencetus untuk mengendalikan sisipan pendua. Pencetus ialah sekeping kod pangkalan data yang dilaksanakan secara automatik apabila peristiwa tertentu berlaku dalam pangkalan data, seperti sisipan atau kemas kini. Dalam kes ini, anda boleh mencipta pencetus untuk menyemak sama ada baris pendua sedang dimasukkan dan menghalangnya daripada menambah pembilang kenaikan automatik.

Sebagai contoh, pencetus berikut menghalang kenaikan automatik untuk sisipan pendua dalam nama jadual jadual:

CREATE TRIGGER prevent_auto_increment_increment
BEFORE INSERT ON tablename
FOR EACH ROW
BEGIN
  IF EXISTS (
    SELECT *
    FROM tablename
    WHERE tag = NEW.tag
  ) THEN
    SET NEW.id = OLD.id;
  END IF;
END;

Kesimpulan:

Dengan melaksanakan salah satu daripada penyelesaian ini, anda boleh menghalang pembilang kenaikan automatik daripada meningkat pada sisipan pendua, memastikan auto anda -nilai kenaikan kekal tepat.

Atas ialah kandungan terperinci Bagaimana untuk Mencegah Penambahan Auto pada Sisipan MySQL Pendua?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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