如何使用默认值在 SQLite 中插入行?

J. *_*son 3 sql sqlite default

更新:

这是我从下面的答案中学到的……

SQLite 支持在列上定义默认值。但是,它不支持查询中任何形式的 DEFAULT 关键字或函数。因此,实际上,不可能执行 MySQL 风格的批量插入,其中在某些行中显式设置列,而在其他行中使用列默认值。

下面列出了几种创造性的解决方法,但为了简单起见,我最喜欢 Shawn 的建议,即每行使用 INSERT 语句,可能全部包含在 BEGIN TRANSACTION 语句中。只有这样您才能使用列默认值。


原问题:

我有一个todo以此模式命名的简单 SQLite 表...

图式

我可以使用以下语法将行插入到该表中...

INSERT INTO 'todo' ('title', 'complete', 'notes') VALUES
  ('Pickup dry cleaning', true, 'They close at 7pm'),
  ('Clean apartment', false, 'Floors have already been swept'),
  ('Finish homework', true, 'Chapters 3 and 4');
Run Code Online (Sandbox Code Playgroud)

然而,

我不知道如何省略某些值并让数据库使用该列的默认值。

例如,该complete列的默认值为0。如果能够undefined作为查询中的值之一传递,那就太好了,从而向 SQLite 发出信号,表明我想使用列默认值,但当我Result: no such column: undefined尝试这样做时,出现错误。

null在这种情况下也不起作用,因为有时您希望将单元格的值显式设置为 null。您也不能简单地省略该值,因为参数是位置性的。

Sha*_*awn 5

您只需将其排除在要插入的列之外即可:

INSERT INTO todo(title, notes) VALUES ('Music practice', 'Not Elvis');
Run Code Online (Sandbox Code Playgroud)

  • 对于搜索此内容的其他人,您可以输入所有默认值,如下所示:“INSERT INTO todo DEFAULT VALUES;” (6认同)
  • 肖恩,我想这个解决方案的问题是我不认为它适用于多行(即批量插入),在某些行中您想要显式设置列的值,但在其他行中您想要使用默认值。 (3认同)