mysql - 如果存在则累积,否则在 Hibernate 中插入
问题描述
例如,假设我想使用 Hibernate 将我在不同月份的特定日期编写的代码行保存在 MySQL 数据库中。1 月 5 日,我写了 100 行代码。这一天我之前没有写任何代码行,所以它只是插入数据。
一年过去了,又是 1 月 5 日。我今天写了50行代码,我尝试将它插入到数据库中。第5天第1个月的ID已经存在,无法插入数据。在这种情况下,我希望它简单地将代码行添加到已经存在的行中,所以它现在说:
DAY. MONTH. LOC.
5. 1. 150.
我目前正在做的是,每次我想插入新数据时,我首先进行SELECT
查询以检查该行是否已经存在。如果是,我创建一个UPDATE
语句,否则我只创建一个INSERT
语句。我正在处理大量数据,并注意到涉及我的数据库的操作开始需要很长时间。因此,我想知道是否有更好、更有效的方法来做到这一点?非常感谢您的帮助。谢谢你。
解决方案
您似乎正在寻找update... on duplicate key
语法。这看起来像:
insert into mytable(day, month, loc)
values(:day, :month, :loc)
on duplicate key update loc = loc + values(loc)
:day
,:month
并:loc
表示您为 提供的参数insert
。
为此,您需要一个唯一约束(day, month)
(或使该列元组成为表的主键)。
当insert
发生违反唯一约束的情况时,MySQL 会转到该on duplicate key
子句,在该子句中我们将新loc
值添加到现有行中已经存在的值中。
推荐阅读
- reactjs - React handleOnSubmit() 需要点击两次
- javascript - Javascript合并具有相同值的数组
- azure - 使用 Service Principal Login 和 pulumi 配置中的连接信息时出现 Pulumi 错误
- javascript - 如何在画布上绘制带有对象的对象并在不绘制的情况下移动对象?
- java - 我如何阻止球离开屏幕?
- lightningchart - 以编程方式拖动 Lightningchart 的图表
- android - 如何使 AppCompatActivity 活动可滑动并包含应用栏?
- excel - VBA .PasteSpecial 正在读取但未在模块中的函数中执行
- json - 如何使用 Powershell 解析 json 文件以获取每个值?
- snowflake-cloud-data-platform - 雪花 - 未嵌套列出现错误:无效参数 > 函数类型