我有张MariaDB的table。
id order name forum_id
1 1 .... 1
2 2 .... 1
3 3 .... 1
4 1 .... 2
5 2 .... 2
其中id为主键。
order是用户给定的编号,用于排列名称
name是这个主题的名称
而forum_id是另一个表的外键
在此表中,order和forum_id是唯一。UNIQUE('order', 'forum_id')
。这意味着您不能将另一个order=1添加到其中forum_id=1。因为这种对偶性已经存在。
现在我的问题是如何使order是根据forum_id自动增加的字段?例如:当另一个forum_id=1被添加时,订单将得到4的值。另一个forum_id=2被添加时,订单将得到3的值。所以我的数据库看起来像这样
id order name forum_id
1 1 .... 1
2 2 .... 1
3 3 .... 1
4 1 .... 2
5 2 .... 2
6 4 .... 1
7 3 .... 2
我看到这个问题在过去以不同的形式被问到。但是大多数被问到的问题都来自10-15年前。所以我想也许这个问题在我使用mariaDB 11的时候得到了答案。
1条答案
按热度按时间0x6upsns1#
AUTO_INCREMENT必须恰好完成2项任务:
AUTO_INCREMENT不应用于其它逻辑构造,尤其是那些假定auto_increment值 表示一系列连续编号的值。
使用带有auto_increment的复合索引有两个严重的缺点:查询合成索引较慢并且记录的时间顺序不再可用。
为了避免冗余,ORDER应该是一个计算列,并且不存储在数据库中。正如Ahmed的注解中所建议的,应该使用一个窗口函数。 是唯一的,则使用RANK、DENSE_RANK还是ROW_NUMBER都无关紧要。