2017-09-15 114 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 –