SQLITE-设置插入时的默认值

SQLITE-设置插入时的默认值,sqlite,replace,insert,default,exists,Sqlite,Replace,Insert,Default,Exists,如果我的SQLite数据库不存在,我需要做一个语句将用户添加到该数据库中,否则更新其值并将1添加到他以前的totalMessages中。 到目前为止,我写了以下内容: INSERT OR REPLACE INTO users (id, username, first, last, totalMessages) values ( 'hisID', 'hisName', 'hisFirst', 'hisLast', (SELECT totalMessages FROM users WHERE id

如果我的SQLite数据库不存在,我需要做一个语句将用户添加到该数据库中,否则更新其值并将1添加到他以前的totalMessages中。
到目前为止,我写了以下内容:

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)
有人能告诉我怎么做吗

更新:我尝试使用Scott建议的“默认“0”和“默认0”,但它仍然将totalMessages保存为空


您可以看到它,测试是。

您的表定义应该包括
totalMessages
列的默认值

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

SQLite不允许在修改表时更改列,但是有一些手动更改列的策略,这些策略已记录在:“”和“”

中。我想我找到了一个解决问题的方法,可能不是最好的,但它是有效的

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);

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

我知道SQLite对它提供的数据并不严格,所以我相当肯定我列出的默认值
'0'
会起作用,但是我不确定它是否可以是
0
,如果那样会更好。totalMessages仍然是空的,可能是因为SELECT返回的值为null,我不确定为什么这需要是一条语句?