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

标签 mysql database dao

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

所以在 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;
}

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

最佳答案

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

我认为这可能会表现得更好,具体取决于抛出异常的成本与两次访问数据库的成本。

只有通过测试这两种情况,您才能确定

关于mysql - 测试数据库中重复键的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002222/

相关文章:

java - 封装仅从 Hibernate 查询返回部分数据

php - 改善脚本执行时间

php - 如果数据库中存在该值,如何验证该值?

Mysql - 如何从表中获取唯一的 dd-mm-YY?

mysql - 我如何将社区构建器从 joomla 1.0 迁移到 joomla2.5

mysql - 我应该如何构建具有松散关系的 SQL 数据库

android - 我在android中的数据库文件在哪里?

php - 从外键检索数据,一对一关系。拉维尔

java - DAO 层内的 JDBC 连接

android - 即使添加 androidx.room:room-ktx 后,房间错误 : Type of the parameter must be a class annotated with @Entity or a collection/array of it.