使用 SQLite 插入单个字段的默认值

sgr*_*rif 6 sqlite

给定 SQLite 中的下表:

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name VARCHAR NOT NULL,
    hair_color VARCHAR NOT NULL DEFAULT 'Green'
)
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行批量插入,hair_color仅对某些行使用默认值。例如,在 PostgreSQL 或 MySQL 中,它可能如下所示:

INSERT INTO users (name, hair_color) VALUES
    ('Sean', 'Black'),
    ('Tess', DEFAULT)
Run Code Online (Sandbox Code Playgroud)

但是,SQLite 不提供DEFAULT除 之外的任何其他上下文中的关键字DEFAULT VALUES。我知道我可以通过两个查询来完成此操作

INSERT INTO users (name, hair_color) VALUES ('Sean', 'Black');
INSERT INTO users (name) VALUES ('Tess');
Run Code Online (Sandbox Code Playgroud)

但是,我无法想象 SQLite 不提供某种机制来在单个查询中执行此操作。DEFAULTSQLite 其他后端的关键字是否有等效项?

CL.*_*CL. 0

SQLite是一个嵌入式数据库,没有客户端/服务器通信开销,因此数据库本身没有技术原因避免使用多个语句。

可以(为每个表)创建一个触发器,用默认值替换特殊值。但是,如果不知道表定义的详细信息,这是不可能的,并且使用单个语句可以插入的行数无论如何都是有限的,因此最简单的解决方案是每行使用一个 INSERT。