SQLITE - 在INSERT上设置默认值

时间:2016-05-24 21:14:39

标签: sqlite replace insert default exists

我需要创建一个语句,将用户添加到我的SQLite数据库(如果它不存在),否则更新其值并将其添加到先前的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)

有人可以告诉我怎么做吗?

更新:我尝试使用“DEFAULT'0'”和“DEFAULT 0”作为Scott建议,但它仍然将totalMessages保存为NULL。

你可以看到它并且测试是here

2 个答案:

答案 0 :(得分:0)

您的表格定义应包含<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css"> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> <div> <img id="image" src="http://static.micheljansen.org/uploads/mac-osx-arrow-cursor.png"/> </div>列的默认值。

totalMessages

SQLite在修改表时不允许更改列,但是有一些策略可以手动执行此操作,这些策略已记录在:“SQLite Modify Column”和“SQLite - alter a table's column type?

答案 1 :(得分:-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);

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