我orders
在 SQLite 数据库中有一个表:
CREATE TABLE orders
(
clientId INTEGER NOT NULL,
listId INTEGER,
exchangeId NOT NULL,
marketId NOT NULL,
id INTEGER NOT NULL,
accountType NOT NULL,
clientGuid NOT NULL,
side NOT NULL,
type NOT NULL,
status NOT NULL,
price NOT NULL,
stopPrice NOT NULL,
amount NOT NULL,
filled NOT NULL,
cost NOT NULL,
createTime NOT NULL,
updateTime NOT NULL,
PRIMARY KEY(clientId)
);
当我创建一条记录、删除它然后创建另一条新记录时,我得到了相同的 clientId (14443):
SQL> INSERT INTO orders (listId, exchangeId, marketId, id, accountType, clientGuid, side, type, status, price, stopPrice, amount, filled, cost, createTime, updateTime) VALUES (19, 'myexchange', 'mymarket', 1163221156, 0, '93c39dd5-bc89-422a-b5e0-a34289ccff44', 0, 0, 1, 778856, 0, 160, 0, 0, 1741356070112000000, 1741356070112000000);
SQL> select * from orders where marketid='mymarket';
(14443, 19, 'myexchange', 'mymarket', 1163221156, 0, '93c39dd5-bc89-422a-b5e0-a34289ccff44', 0, 0, 1, 778856, 0, 160, 0, 0, 1741356070112000000, 1741356070112000000)
SQL> DELETE FROM orders WHERE clientId=14443;
SQL> INSERT INTO orders (listId, exchangeId, marketId, id, accountType, clientGuid, side, type, status, price, stopPrice, amount, filled, cost, createTime, updateTime) VALUES (19, 'myexchange', 'mymarket', 1163221156, 0, '93c39dd5-bc89-422a-b5e0-a34289ccff44', 0, 0, 1, 778856, 0, 160, 0, 0, 1741356070112000000, 1741356070112000000);
SQL> select * from orders where marketid='mymarket';
(14443, 19, 'myexchange', 'mymarket', 1163221156, 0, '93c39dd5-bc89-422a-b5e0-a34289ccff44', 0, 0, 1, 778856, 0, 160, 0, 0, 1741356070112000000, 1741356070112000000)
但是文档中有以下内容:
为新行选择的 ROWID 至少比同一张表中曾经存在过的最大 ROWID 大 1 。
所以根据clientId
重新创建的记录的文档应该是 14444,对吗?
如果已删除的订单之一错误地保留在应用程序中的某个位置,则新clientId
订单与先前删除的订单相匹配的事实clientId
会导致潜在的错误。clientId
有没有办法让 SQLite 生成唯一的clientId
?
您使用的是正常
ROWID
选择算法,如您链接的文档第 2 节中所定义。它指出(我添加了粗体以示强调):您引用的段落来自第 3 节,引用了
AUTOINCREMENT
关键字。要应用它,您需要明确使用此关键字: