首页 > 解决方案 > 在 SQLite 中自动增加复合键

问题描述

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

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

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

示例数据:

订单号 库存单位 ETC
abc123 xyz ETC
def456 xyz ETC
abc123 wxc ETC
吉645 wxc ETC
abc123 hk4 ETC
def456 hk4 ETC

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

订单号 电话号码 库存单位 ETC
abc123 1 xyz ETC
def456 1 xyz ETC
abc123 2 wxc ETC
吉645 1 wxc ETC
abc123 3 hk4 ETC
def456 2 hk4 ETC

标签: sqlitemaxsql-insert

解决方案


没有自动的方法可以做到这一点,比如自动增量列。

您可以使用一条语句插入每一行,该SELECT语句使用相同的语句计算表的行数orderNumber

INSERT INTO tablename(orderNumber, lineNumber, SKU, ....)
SELECT 'abc123', COALESCE(MAX(lineNumber), 0) + 1, 'xyz', .... 
FROM tablename 
WHERE orderNumber = 'abc123';

请参阅演示


推荐阅读