MySQL或SQLite是否支持“插入或更新”语句?

问题描述:

如果我没有错,“插入或更新”语句在Oracle中可用。如果主键不存在,则可以创建新行,否则更新该行。或者只能使用一些存储过程或存储功能?MySQL或SQLite是否支持“插入或更新”语句?

的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替换

onconflict - 见http://www.sqlite.org/lang_conflict.html

REPLACE当一个UNIQUE限制 冲突发生时,更换 算法删除预先存在的行 导致约束插入之前违规或更新当前行的 ,并且 命令继续正常执行。 如果违反NOT NULL约束 发生时,他与该列, 默认值或者如果该列没有缺省值,则使用 中止算法REPLACE冲突 决议替代NULL值 。如果发生了一个 CHECK约束冲突, 替换冲突解决算法 总是像ABORT一样工作。

当REPLACE冲突解决 策略删除行,以满足 约束,当且仅当递归触发器 启用删除触发器 火灾。

更新挂钩不被 行调用,该行由REPLACE 冲突解决策略删除。 REPLACE也不会增加更改计数器。 此段落中定义的例外行为可能会在未来的版本中发生变化 。

+0

你能举个例子吗?也许我不明白。当它发现冲突时,它总是进行删除 - >插入或考虑进行更新?它将在什么时候发布(如果是)只有更新? – StErMi 2012-01-06 17:45:41