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的主要内容,如果未能解决你的问题,请参考以下文章

属性默认值为 null 是不是与无默认值相同?

angular 下拉框null默认值

ALTER TABLE 添加默认值为 NULL 的列

如果请求值为空,Laravel 设置默认值

为什么 MySQL 不推荐默认值为 null ?

为什么 MySQL 不推荐默认值为 null ?