You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite插入操作中如何在字段引用ROWID生成默认值?

可以实现,两种常用方案:

方案一:用AFTER INSERT触发器(推荐)

你的表中id是INTEGER PRIMARY KEY,它会自动映射到SQLite的ROWID,所以可以通过触发器在插入后自动补全name值:

  1. 先给name字段设置一个默认值(因为NOT NULL约束不允许字段为空):
ALTER TABLE data ALTER COLUMN name SET DEFAULT '';
  1. 创建触发器,当插入的name为默认空字符串时,自动更新为'data'||id格式:
CREATE TRIGGER auto_fill_name
AFTER INSERT ON data
FOR EACH ROW
WHEN NEW.name = ''
BEGIN
  UPDATE data SET name = 'data' || NEW.id WHERE id = NEW.id;
END;

这样用户插入时,若不提供name值,会先用默认空字符串插入,触发器立刻将name替换成data+id(即你要的data+ROWID格式);若用户提供了name,则直接使用用户输入的值。

方案二:分两步手动操作(无需修改表结构)

先插入带临时占位值的记录,获取生成的ID后再更新name:

-- 插入临时记录
INSERT INTO data (name) VALUES ('temp');
-- 获取刚生成的ID
SELECT last_insert_rowid() INTO @new_id;
-- 更新为目标格式的name
UPDATE data SET name = 'data' || @new_id WHERE id = @new_id;

这种方法不是原子操作,若中间出现异常可能会残留临时值,不如触发器方案稳妥。

注:因为id是主键,和SQLite的ROWID完全等价,所以用NEW.id和直接引用ROWID效果一致,用id更直观。

内容的提问来源于stack exchange,提问作者MishaP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:14:54