数据库表中某些组的 MySQL 自动增量

问题描述

我创建了以下 MysqL 表,但不确定如何正确自动增加 entry_id。理想情况下,自动增量适用于每个 order_id。例如,如果订单 ID 1 有 3 个条目,那么这些条目的 ID 将是 1、2、3。同样,如果订单 id 2 有 3 个条目,那么这些条目也将具有条目 ID 1、2、3。这可以实现吗?

/* Table `ims`.`OrderEntries` */
CREATE  TABLE IF NOT EXISTS `ims`.`OrderEntries` (
    `ENTRY_ID` INT NOT NULL AUTO_INCREMENT,`ORDER_ID` INT NOT NULL,`ITEM_ID` INT NOT NULL,`ITEM_NAME_AT_TIME_OF_ORDER` INT NOT NULL,`ITEM_COST_AT_TIME_OF_ORDER` DECIMAL NOT NULL,`ITEM_QUANTITY` INT NOT NULL,PRIMARY KEY (`ORDER_ID`,`ITEM_ID`)
);

解决方法

您甚至不需要费心去实现它,尤其是随着支持 ROW_NUMBER 的 MySQL 8+ 的出现。要生成您在上面描述的系列,您可以简单地使用:

SELECT ENTRY_ID,ORDER_ID,ROW_NUMBER() OVER (PARTITION BY ORDER_ID ORDER BY ENTRY_ID) SEQ
FROM OrderEntries
ORDER BY ORDER_ID,ENTRY_ID;

这将生成如下所示的内容:

ENTRY_ID | ORDER_ID | SEQ
1        | 1        | 1
2        | 1        | 2
3        | 1        | 3
4        | 2        | 1
5        | 2        | 2
6        | 2        | 3