2016-05-24 46 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); 

如果有人有更好的解决方案,请回答。