Rumah > pangkalan data > tutorial mysql > Mengapa Peningkatan Autoincrement MySQL Walaupun pada Sisipan Gagal dengan Kekangan Unik?

Mengapa Peningkatan Autoincrement MySQL Walaupun pada Sisipan Gagal dengan Kekangan Unik?

Barbara Streisand
Lepaskan: 2024-11-25 12:16:15
asal
125 orang telah melayarinya

Why Does MySQL's Autoincrement Increment Even on Failed Inserts with Unique Constraints?

Kelakuan Autoincrement MySQL pada Sisipan Gagal

Soalan:

Mengapa autoincrement nilai dalam MySQL meningkat walaupun sisipan gagal apabila medan unik wujud?

Penjelasan:

InnoDB, enjin lalai dalam MySQL, beroperasi secara transaksi. Oleh itu, apabila berbilang sesi mencuba sisipan serentak ke dalam jadual dengan lajur autoincrement, senario tertentu mungkin timbul:

  • Jika Sesi A memasukkan rekod dan kemudiannya digulung semula, jurang mungkin berlaku atau Sesi B, yang cuba memasukkan rekod secara serentak, mungkin dikunci sehingga transaksi Sesi A menyimpulkan.
  • Untuk meningkatkan konkurensi bagi sisipan ke dalam jadual sedemikian, InnoDB menggunakan kunci AUTO-INC peringkat jadual khas. Kunci ini dilepaskan pada penghujung pernyataan SQL, bukan transaksi, membenarkan sesi lain mengakses kaunter kenaikan automatik dengan lebih cekap.

Akibat:

Apabila sisipan gagal disebabkan pelanggaran kekangan medan yang unik, nilai autoincrement masih dinaikkan kerana InnoDB mengekalkan kaunter autoincrement dalam memori sepanjang operasi pelayan. Apabila pelayan dimulakan semula, InnoDB menetapkan semula kaunter untuk setiap jadual semasa sisipan pertama ke dalam jadual itu.

Mitigasi:

Jika potensi pembalut lajur ID menjadi kebimbangan , pertimbangkan untuk menggunakan jenis data BIGINT (8-bait panjang) untuk menyediakan julat nilai yang lebih besar.

Atas ialah kandungan terperinci Mengapa Peningkatan Autoincrement MySQL Walaupun pada Sisipan Gagal dengan Kekangan Unik?. 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