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

如何在SurrealDB的INSERT INTO语句ON DUPLICATE KEY UPDATE中访问单个值?

SurrealDB 中实现类似 SQL VALUES() 的重复键更新方式

SurrealDB 没有提供和 SQL 完全一致的 VALUES() 运算符,但可以通过**$字段名引用插入值**的方式实现相同效果——在重复键冲突时,用待插入的字段值更新现有记录。

对应示例的实现写法

针对你给出的 SQL 示例,SurrealDB 中等价的写法如下:

INSERT INTO users (id, username, email)
VALUES (1, 'new_user', 'new@example.com')
ON DUPLICATE UPDATE
    email = $email;

这里的 $email 就对应 SQL 里 VALUES(email) 的作用,直接引用 INSERT 语句中准备插入的 email 值,用于更新冲突记录的对应字段。

更灵活的场景:仅更新指定字段

如果需要只更新部分字段(比如保留原 username,仅更新 email),上面的写法完全适用;如果要批量插入并处理重复键,也可以复用这个逻辑:

INSERT INTO users (id, username, email)
VALUES 
    (1, 'user1', 'user1_update@example.com'),
    (2, 'user2', 'user2_update@example.com')
ON DUPLICATE UPDATE
    email = $email;

每条冲突的记录都会用对应行的待插入 email 值完成更新。

替代方案:简化的 UPSERT 语句

如果你需要直接覆盖所有字段(插入新记录,或完全更新重复键的现有记录),可以用 SurrealDB 内置的 UPSERT 语句,写法更简洁:

UPSERT INTO users (id, username, email) VALUES (1, 'new_user', 'new@example.com');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:14:59