【问题标题】:SQL replace vs. doing an insert or update statementSQL 替换与执行插入或更新语句
【发布时间】:2011-04-14 17:38:03
【问题描述】:

我想知道执行 MySQL 替换与执行更新或插入语句的优点/缺点是什么。

基本上,

在做

dao.replaceEntry(entry);

代替:

if(existing){
     dao.insertEntry(entry);
} else {
     dao.updateEntry(entry);
}

另外,调用 dao.replaceEntry 调用 dao.insertOrUpdate 会产生误导吗?

【问题讨论】:

    标签: java sql mysql


    【解决方案1】:

    我会做 insertOrUpdate 而不是替换。根据 Mysql 的文档

    REPLACE 的工作方式与 INSERT 完全相同, 除了如果表中的旧行 具有与 a 的新行相同的值 PRIMARY KEY 或 UNIQUE 索引,旧的 行在新行被删除之前被删除 插入

    如果行存在,则执行删除,然后插入新行。更新是更好的方法,然后像 REPLACE 那样删除和插入,即一个操作与两个操作。

    我能想到的另一个问题是数据库中有触发器或级联删除。在 REPLACE 的情况下,您介意最终删除相关的行,因为 REPLACE 将首先删除然后插入,如果具有相同 ID 的行已经存在。

    【讨论】:

    • +1 级联删除时永远不要使用替换 - 有些人会很难学会这一点:p。
    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 2011-01-16
    • 2019-06-04
    • 1970-01-01
    • 2015-09-25
    • 2022-12-03
    • 2012-01-11
    • 1970-01-01
    相关资源
    最近更新 更多