【问题标题】:SQLite default value if nullSQLite 默认值为 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,有没有办法设置列的默认值?

【问题讨论】:

    标签: sqlite insert null default-value


    【解决方案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】:
          1. 如果具有默认值的列可以具有 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/

          1. 如果具有默认值的列不能具有 NOT NULL 约束(允许插入 NULL),如您的问题:

            您必须从插入查询中省略具有默认值的列,以便它获得默认值。

          理想的情况是:

          INSERT INTO "Table" (a, b) VALUES(1, COALESCE(NULL, DEFAULT))

          ,与其他 sql 方言一样,未来版本可能会支持: https://sqlite.org/forum/info/d7384e085b808b05

          【讨论】:

            猜你喜欢
            • 2018-11-17
            • 1970-01-01
            • 1970-01-01
            • 2014-01-16
            • 1970-01-01
            • 2012-10-31
            • 2012-12-15
            • 2016-12-11
            • 1970-01-01
            相关资源
            最近更新 更多