更新日期:
以下是我从下面的答案中学到的...
SQLite支持在列上定义默认值。但是,它不支持查询中任何形式的DEFAULT关键字或函数。因此,实际上,不可能执行MySQL风格的批量插入,即在某些行中显式设置列,而在其他行中使用列默认值。
下面列出了几种创造性的解决方法,但为了简单起见,我更喜欢Shawn的建议,即每行使用一个INSERT语句,可能所有语句都被 Package 在开始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');
但是,
我不知道如何省略某些值并让数据库对该列使用默认值。
例如,complete
列的默认值为0
,如果能够将undefined
作为查询中的一个值传递就很好了,这样就可以通知SQLite我想使用列的默认值,但是当我尝试这样做时,我得到了Result: no such column: undefined
错误。null
在这种情况下也不起作用,因为有时候你想显式地将单元格的值设置为null,你也不能简单地省略这个值,因为参数是有位置的。
4条答案
按热度按时间rdrgkggo1#
您只需将其从要插入的列中删除即可:
o2g1uqev2#
我不知道如何省略某些值并让数据库使用该列的默认值。
在撰写本文时,SQLite还不支持
default(_)
函数,但是可以使用触发器来实现想要的效果,尽管这样做有点麻烦。下面是一个例子:
--
脚注:可通过以下方式确定默认值:
因此,使用WITH,您可以有蛋糕吃:
ct3nt3jp3#
如果您使用的是更好的sqlite3,这是可行的,而且我认为它同样适用于sqlite3。
68de4m5k4#
Shawn所说的内容加上批量问题可以用DEFAULTvalue来解决,也就是说,如果您手动插入所有记录,如果您希望通过循环动态插入,例如,您必须将变量声明为默认值,如果特定值存在,则更改为特定值,并在查询中使用此变量。