MySQL或SQLite是否支持“INSERT OR UPDATE”语句?

时间:2011-05-24 04:15:40

标签: mysql sql sqlite merge

如果我没有错,可以在Oracle中使用“INSERT OR UPDATE”语句。如果主键不存在,则可以创建新行,否则更新该行。或者只能使用某些存储过程或存储函数?

1 个答案:

答案 0 :(得分:6)

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

onconflict - 请参阅http://www.sqlite.org/lang_conflict.html

  

REPLACE当一个UNIQUE约束时   发生违规,REPLACE   算法删除预先存在的行   导致约束的   插入之前违反或   更新当前行和   命令继续正常执行。   如果违反NOT NULL约束   发生,REPLACE冲突   resolution替换NULL值   使用该列的默认值,   或者如果列没有默认值,   然后使用ABORT算法。如果一个   发生CHECK约束违规,   REPLACE冲突解决算法   总是像ABORT一样。

     

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

     

未调用更新挂钩   REPLACE删除的行   冲突解决策略。也没有   REPLACE增加更改计数器。   中定义的特殊行为   本段可能会改变   未来发布。