Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah Saya Boleh Menghalang Peningkatan Auto MySQL pada Sisipan Duplikat?

Bagaimanakah Saya Boleh Menghalang Peningkatan Auto MySQL pada Sisipan Duplikat?

Linda Hamilton
Linda Hamiltonasal
2024-11-21 06:38:09482semak imbas

How Can I Prevent MySQL Auto-Increment on Duplicate Inserts?

Mencegah Peningkatan Auto pada Sisipan Duplikat MySQL

Apabila menggunakan MySQL 5.1.49, memasukkan baris pendua ke dalam jadual InnoDB dengan penambahan automatik kunci utama boleh mengakibatkan penambahan medan ID walaupun sisipan diabaikan. Ini boleh membawa kepada jurang yang tidak diingini dalam jujukan ID.

Penyelesaian

Untuk mengelakkan kenaikan automatik pada sisipan pendua, anda boleh menggunakan pernyataan INSERT yang diubah suai:

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

Di mana $tag ialah nilai tag yang ingin anda masukkan. Pendekatan ini melakukan semakan untuk melihat sama ada teg sudah wujud sebelum mencuba memasukkan. Jika teg tidak wujud, sisipan dilakukan dan kaunter kenaikan automatik tidak terjejas.

Kelebihan Pendekatan ini:

  • Menghalang kenaikan automatik pada pendua: Ia memastikan bahawa pembilang kenaikan automatik hanya dinaikkan apabila teg baharu dimasukkan.
  • Pantas: Semakan EXISTS dilaksanakan dengan cekap jika jadual diindeks dengan betul.
  • Mengendalikan kes teg pertama: Anda boleh menyemai jadual dengan teg pemegang tempat atau melakukan semakan berasingan untuk jadual kosong untuk mengendalikan sisipan teg pertama.

Dengan menggunakan pernyataan INSERT yang diubah suai ini, anda boleh menghalang pembilang kenaikan automatik daripada meningkat pada sisipan pendua, memastikan urutan ID yang berjujukan dan bebas jurang.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Peningkatan Auto MySQL pada Sisipan Duplikat?. 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