Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Penambahan Auto SIRI Tersuai dalam Kategori dalam Pangkalan Data?

Bagaimana untuk Melaksanakan Penambahan Auto SIRI Tersuai dalam Kategori dalam Pangkalan Data?

Patricia Arquette
Patricia Arquetteasal
2025-01-14 08:27:43295semak imbas

How to Implement Custom SERIAL Auto-Increment within Categories in a Database?

Kumpulkan mengikut nilai untuk melaksanakan kenaikan automatik SIRI tersuai

Cabaran:

Dalam sistem blog, anda mempunyai jadual artikel dengan tiga lajur: id (jujukan), kategori (varchar) dan category_id (int). Anda mahu category_id meningkat secara automatik dalam setiap kategori sambil kekal unik di seluruh jadual.

Ketidaksahan logik tersuai:

Cuba melaksanakan ini menggunakan dua pertanyaan dan kod logik yang berasingan boleh menyebabkan isu konkurensi dalam persekitaran berbilang pengguna.

Penyelesaian yang disyorkan:

Buang lajur category_id:

  • Alih keluar lajur category_id kerana ia tidak memberikan sebarang maklumat tambahan selain lajur id dan kategori.
  • Gunakan lajur id kenaikan automatik sebagai pengecam unik untuk artikel.

Pengiraan dinamik kedudukan kategori:

  • Jika anda masih memerlukan pengecam khusus kategori, gunakan fungsi row_number() untuk mengira kedudukan setiap artikel dalam kategori:
<code class="language-sql">SELECT id, category, ROW_NUMBER() OVER (PARTITION BY category ORDER BY id) AS category_id
FROM article;</code>

Contoh:

<code class="language-sql">INSERT INTO article(category) VALUES ('stackoverflow');</code>

Keputusan:

<code>SELECT * FROM article WHERE category = 'stackoverflow';
+----+-----------+---------+
| id  | category  | category_id |
+----+-----------+---------+
| 10  | stackoverflow | 1 |
| 11  | stackoverflow | 2 |
+----+-----------+---------+</code>

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Penambahan Auto SIRI Tersuai dalam Kategori dalam Pangkalan Data?. 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