按值分组实现自定义SERIAL自动递增
挑战:
在一个博客系统中,您有一个文章表,包含三列:id(序列)、category(varchar)和category_id(int)。您希望category_id在每个类别中自动递增,同时在整个表中保持唯一性。
自定义逻辑的无效性:
尝试使用两个单独的查询和逻辑代码来实现这一点,可能会在多用户环境中导致并发问题。
推荐解决方案:
放弃category_id列:
动态计算类别位置:
<code class="language-sql">SELECT id, category, ROW_NUMBER() OVER (PARTITION BY category ORDER BY id) AS category_id FROM article;</code>
示例:
<code class="language-sql">INSERT INTO article(category) VALUES ('stackoverflow');</code>
结果:
<code>SELECT * FROM article WHERE category = 'stackoverflow'; +----+-----------+---------+ | id | category | category_id | +----+-----------+---------+ | 10 | stackoverflow | 1 | | 11 | stackoverflow | 2 | +----+-----------+---------+</code>
以上是如何在数据库中的类别内实现自定义序列自动递增?的详细内容。更多信息请关注PHP中文网其他相关文章!