在 SQLite 中自动增加复合键

Autoincrement a composite key in SQLite

我正在尝试创建一个使用复合主键的 table。这个想法是我们有一个订单“编号”(字符串)和一个行号(整数)。当插入table时,顺序号是已知的,但没有已知或指定的行号;我希望它自动生成为该订单号的最低行号。

我试过使用复合主键(orderNumber、lineNumber)并将 lineNumber 设为 NULL,无论 lineNumber 字段是否设置为 NOT NULL。我也试过在 lineNumber 上使用 AUTOINCREMENT,但是,这只会给我一个语法错误。

我正在编写的程序使用的是 C++,所以我的意思是最坏的情况是我可以自己查询 orderNumber 并在插入行之前计算要插入的 lineNumber,但这似乎不是最佳选择。有什么建议吗?

示例数据:

orderNumber SKU etc
abc123 xyz etc
def456 xyz etc
abc123 wxc etc
ghi645 wxc etc
abc123 hk4 etc
def456 hk4 etc

在table中插入这些行后,应该是

orderNumber lineNumber SKU etc
abc123 1 xyz etc
def456 1 xyz etc
abc123 2 wxc etc
ghi645 1 wxc etc
abc123 3 hk4 etc
def456 2 hk4 etc

没有像自动增量列那样自动执行此操作的方法。

您可以使用 SELECT 语句插入每一行,该语句使用相同的 orderNumber:

计算 table 的行数
INSERT INTO tablename(orderNumber, lineNumber, SKU, ....)
SELECT 'abc123', COALESCE(MAX(lineNumber), 0) + 1, 'xyz', .... 
FROM tablename 
WHERE orderNumber = 'abc123';

参见demo