2017-09-15 111 views
0

我有一个SQLite数据库,我需要用不断增加的计数器标记任何新记录和任何修改的记录。我必须避免竞争条件插入和更新的SQLite自动增量

这些都是我使用的那一刻我的两个疑问:

插入:

INSERT INTO customer (id, name, counter) VALUES (myId, "blablabla", ((SELECT MAX(counter) FROM customer) + 1)) 

更新:

UPDATE customer SET name = "blablabla", counter = (SELECT MAX(counter) FROM customer) + 1 WHERE id = myId 

是这安全吗?我在Cordova移动应用上使用SQLite

如果不是,那么最好的方法是什么?我可以声明counterAUTO_INCREMENT并且只有这两个查询吗?

插入:

INSERT INTO customer (id, name) VALUES (myId, "blablabla") 

更新:

UPDATE customer SET name = "blablabla", counter = (SELECT MAX(counter) FROM customer) + 1 WHERE id = myId 
+0

SQLite和MySQL是两个完全不同的东西。 – tadman

+0

让我们去SQLite然后... BTW辉煌 - > https://github.com/ConsenSys/dapp-store-contracts/blob/master/contracts/ReviewModel.sol –

+0

SQLite是一个很好的选择嵌入到应用程序,因为它不需要服务器进程。 – tadman

回答

1

让持有不过如此每次计数器调用的值的表添加一个新的记录或更新和将其值增加1,然后将该值写回TABLE并更新我不确定在删除记录时做了什么,但是与上面相同,只需将计数器值减1

如果不分钟你能告诉我们为什么记录需要有一个ID和一个psudo ID也没关系真实ID是什么,或者我错过了你在做什么,我说的是sqlite的唯一

+0

我解决了删除问题购买转换删除到更新。基本上,而不是实际删除一条记录,我更新了一个“删除”字段。每个“选择”查询都选择与= =的AND –