SQLite 默认值为 null
Posted
技术标签:
【中文标题】SQLite 默认值为 null【英文标题】:SQLite default value if null 【发布时间】:2012-01-18 17:12:47 【问题描述】:假设我有一个名为“table”的表
所以
Create Table "Table" (a int not null, b int default value 1)
如果我执行“INSERT INTO "Table" (a) values (1)
”。我会为 a 列取回 1,为 b 列取回 1,因为 b 列的默认值为 1。
但是如果我做“INSERT INTO "Table" (a, b) values (1, null)
”。我会在 a 列下注 1,在 b 列下注空值。如果给定 null,有没有办法设置列的默认值?
【问题讨论】:
【参考方案1】:不,如果你这样做:
INSERT INTO my_table (a, b) values (1, null)
您明确要求b
列上的null
值。
在 RDBMS 中,从技术上讲,您可以使用触发器来覆盖该行为。但是在 SQLite 中你不能。
【讨论】:
【参考方案2】:如果您不想为列 b
设置空值,那么您应该将其设置为不可为空的字段,就像对 a
所做的那样
【讨论】:
【参考方案3】:This solution for mysql 应该主要适用于 SQLite。主要的(虽然也是主要的)区别在于 SQLite 中似乎没有像 MySQL 中那样的 Default()
函数。通过在 php 中跟踪我的数据库模式,然后手动将默认值作为第二个参数插入 Coalesce()
,我能够复制此功能。 See this Gist 示例代码。
【讨论】:
【参考方案4】:-
如果具有默认值的列可以具有 NOT NULL 约束,那么您可以:
使用以下语法创建表:
CREATE TABLE "Table" (a INT NOT NULL, b INT NOT NULL ON CONFLICT REPLACE DEFAULT 1);
照常插入
按照您的问题创建表格
并使用以下语法插入:
INSERT OR REPLACE INTO "Table" (a, b) VALUES(1, null);
https://database.guide/convert-null-values-to-the-columns-default-value-when-inserting-data-in-sqlite/
如果具有默认值的列不能具有 NOT NULL 约束(允许插入 NULL),如您的问题:
您必须从插入查询中省略具有默认值的列,以便它获得默认值。
理想的情况是:
INSERT INTO "Table" (a, b) VALUES(1, COALESCE(NULL, DEFAULT))
,与其他 sql 方言一样,未来版本可能会支持: https://sqlite.org/forum/info/d7384e085b808b05
【讨论】:
以上是关于SQLite 默认值为 null的主要内容,如果未能解决你的问题,请参考以下文章