sqlite - 在 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 |
解决方案
没有自动的方法可以做到这一点,比如自动增量列。
您可以使用一条语句插入每一行,该SELECT
语句使用相同的语句计算表的行数orderNumber
:
INSERT INTO tablename(orderNumber, lineNumber, SKU, ....)
SELECT 'abc123', COALESCE(MAX(lineNumber), 0) + 1, 'xyz', ....
FROM tablename
WHERE orderNumber = 'abc123';
请参阅演示。
推荐阅读
- arrays - 在 React Native 中作为对象返回的数组 = 不能引用数组项?
- c# - 此页面无法正常工作。Localhost 当前无法处理此请求。HTTP 错误 500
- function - Haskell 用递归重新定义单词函数
- python - Python CSV SQL行不打印
- input - 不能用触摸板移动鼠标
- kotlin - 如何编码“多个范围内的元组”?
- css - css动画变换 - 保持任意旋转
- c# - Asp:FileUpload 控制多张图片上传多次返回同一张图片
- typescript - 类型的打字稿传播运算符
- javascript - 如果当前日期是假日则返回布尔 JavaScript 函数