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
Lepaskan: 2024-11-19 11:36:02
asal
939 orang telah melayarinya

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

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

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!

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