美文网首页
「实习记录」insert or update操作

「实习记录」insert or update操作

作者: 飞云掣电_iris | 来源:发表于2018-05-18 19:24 被阅读0次

依然是mentor要求(mentor是个严格的好人),insert的时候最好不要直接插入信息,先根据unique key判断信息是否已经存在,如果存在就update,反之insert。

根据这个要求我们可以google到一个叫insert or update的方法,即on duplicate key update,只要设置一个unique key,就会自动根据其判断是否已存在。

这是一个很好的方法,如果你没有使用auto increment主键。

测试发现对于自增主键来说,只要程序进入insert,就会给主键值加一,也就是不论是程序实际进行的是update操作,还是insert操作出现错误(eg:主键重复),自增主键都会加一。即如果第一次insert成功,主键为1,中间出现了两次update或是错误,下一次insert的主键就会是4。

在update操作非常多的数据集中,或是在需要转移数据库次数较多的情况下,这样的操作都会带来非常严重的问题。

(在mentor的指导下我测试了最新的mariadb数据库(10.3.6),这个问题依然没有得到解决。查找发现replace into同样会出现这种情况。)

最后我选择的解决方式是将insert和update拆开,先用count查找某个记录是否存在,count会返回该记录的数值,根据数值是否为0判断记录是否存在,如果以存在,就调用update,如果不存在就调用insert。

举个栗子:

try{

if(employeeMapper.selectCount(key) !=0)

{

employeeMapper.updateByEmployee(employee);

}

else

    {

employeeMapper.insertSelective(employee);

}

}catch (DataAccessException e)

{

logger.info(e.getMessage());

}

相关文章

  • 「实习记录」insert or update操作

    依然是mentor要求(mentor是个严格的好人),insert的时候最好不要直接插入信息,先根据unique ...

  • 第五章 子查询与连接

    数据准备 回顾 记录操作:写操作:INSERT,UPDATE,DELETE读取操作:SELECT 这章主要学习:子...

  • MyBatis 拦截器 - 统计sql执行信息

    更多MyBatis实战内容,请参考:MyBatis - 实战指南 背景 记录insert/update操作执行的s...

  • Oracle数据库学习三

    5.DML DML 语句 语句操作语言 INSERT UPDATE DELETE MERGE INSERT 方法:...

  • SQL(二)

    修改数据 INSERT:插入新记录;UPDATE:更新已有记录;DELETE:删除已有记录。 INSERT INS...

  • DML语言

    数据操作语言 插入:insert 修改:update 删除:delete

  • sqlite(18)-java

    连接数据库# 创建表# INSERT操作# SELECT操作# UPDATE操作# DELETE操作#

  • SQL--DML语句

    DML 语句是指对数据库中表的记录进行的操作。 主要包括 增删改查,对应 insert delete update...

  • MySQL | 数据操作语言:DML

    DML 数据操作语言.插入,删除与更新数据库表中的数据. insert delete update insert ...

  • 2018-11-13-MySQL-Basic

    SELECT INSERT WHERE 操作符 UPDATE DELETE LIKE UNION ORDER BY...

网友评论

      本文标题:「实习记录」insert or update操作

      本文链接:https://www.haomeiwen.com/subject/fxkndftx.html