2016-05-24 57 views
1

我需要創建一個語句,如果語句不存在,則將用戶添加到我的SQLite數據庫中,否則請更新其值並將1添加到其以前的totalMessages中。
到目前爲止,我寫了這個:SQLITE - 在INSERT上設置默認值

INSERT OR REPLACE INTO users (id, username, first, last, totalMessages) values (
'hisID', 
'hisName', 
'hisFirst', 
'hisLast', 
(SELECT totalMessages FROM users WHERE id = 'hisID') +1); 

它正常工作時,該用戶已經存在,但如果沒有,totalMessages的值設置爲NULL,我需要它爲0

這是我的用戶表:

CREATE TABLE IF NOT EXISTS users (
id VARCHAR(255) PRIMARY KEY, 
username VARCHAR(255), 
first VARCHAR(255), 
last VARCHAR(255), 
totalMessages INTEGER) 

任何人能告訴我該怎麼做,好嗎?

更新:我試過使用「DEFAULT'0'」和「DEFAULT 0」作爲斯科特建議,但它仍然將totalMessages保存爲NULL。

你可以看到它,測試是here

+0

爲什麼這需要成爲一個單一的聲明? –

回答

0

您的表格定義應該包含totalMessages列的默認值。

CREATE TABLE IF NOT EXISTS users (
... 
totalMessages INTEGER DEFAULT '0') 

的SQLite不允許修改表時更改列,但也有一些策略來手動做到這一點,已經在被記錄在案:「SQLite Modify Column」和「SQLite - alter a table's column type?

+0

我知道SQLite對它的數據並不嚴格,所以我相當肯定我列爲'0'的默認值將起作用,但是我不確定它是否可以只是'0'並且如果那樣會更好。 –

+0

totalMessages仍然是NULL,這可能是因爲SELECT返回的值爲null,我不確定 – Alberto

-1

我想我找到解決我的問題,可能不是最好的,但它的工作原理。

REPLACE INTO users (id, username, first, last, totalMessages) values (
'hisID', 
'hisName', 
'hisFirst', 
'hisLast', 
CASE WHEN (SELECT totalMessages FROM users WHERE id = 'hisID') IS NULL THEN 
    0 
ELSE 
    (SELECT totalMessages FROM users WHERE id = 'hisID') +1 
END); 

如果有人有更好的解決方案,請回答。