【发布时间】:2011-08-31 15:04:25
【问题描述】:
如果我没记错的话,Oracle 中可以使用“插入或更新”语句。如果主键不存在则创建新行或更新该行的可能性。还是只能使用一些存储过程或存储函数?
【问题讨论】:
如果我没记错的话,Oracle 中可以使用“插入或更新”语句。如果主键不存在则创建新行或更新该行的可能性。还是只能使用一些存储过程或存储函数?
【问题讨论】:
MySQL:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
对于 SQLite,您将使用 ON CONFLICT REPLACE
- 见http://www.sqlite.org/lang_conflict.html
REPLACE 当一个 UNIQUE 约束 违规发生时,REPLACE 算法删除预先存在的行 导致约束的 插入前违反或 更新当前行和 命令继续正常执行。 如果 NOT NULL 约束违反 发生,REPLACE冲突 分辨率替换 NULL 值 使用该列的默认值, 或者如果该列没有默认值, 然后使用 ABORT 算法。如果一个 CHECK 约束违反发生时, REPLACE 冲突解决算法 总是像 ABORT 一样工作。
当REPLACE冲突解决 策略删除行以 满足约束,删除触发器 当且仅当递归触发时触发 已启用。
更新钩子没有被调用 由 REPLACE 删除的行 冲突解决策略。也没有 REPLACE 增加更改计数器。 定义的异常行为 这一段可能会改变 未来版本。
【讨论】: