测试数据库中重复键的最佳方法

Ada*_*m B 1 mysql database dao

这更像是一个正确性问题.假设我的数据库中有一个包含主键列的表.在我的DAO代码中,我有一个名为insertRow(string key)的函数,如果表中不存在该键并且使用该键插入一个新行,则该函数将返回true.否则,如果该键已经存在,则返回false.让insertRow首先检查密钥是否存在更好/更糟或只是继续执行插入并捕获重复密钥错误?或者在单个选择语句中保存太微不足道的优化甚至令人担心?

所以在sudo代码中:

boolean insertRow(String key){
    //potentially a select + insert
    if(select count(*) from mytable where key = "somekey" == 0){
       insert into mytable values("somekey")
       return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

要么

  boolean insertRow(String key){
    try{
       //always just 1 insert
       insert into mytable values("somekey")
       return true;
    } catch (DuplicateKeyException ex){}
    return false;
  }
Run Code Online (Sandbox Code Playgroud)

Stu*_*art 6

插入行,捕获重复键错误.我个人的选择

我认为这可能会表现得更好,这取决于抛出异常的成本与两次击中db的成本.

只有通过测试这两种情景才能确定