我有一些使用 MySQL 连接器的 C++ 代码。我们的数据库是 innodb。
代码的目标是定位一行,如果它存在则用新值更新它,如果它不存在则插入。
目前,它正在执行一个显式操作:“选择...其中...”,然后根据是否找到记录进行插入或更新。
我最近发现了“INSERT...ON DUPLICATE KEY UPDATE”:https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html很高兴能在这里应用它,认为我们可以用它来提高性能。
首先,我认为性能可能会提高是否正确?
其次,我有一点问题。插入的字段之一是为同一记录划分两个其他字段的结果。我需要考虑除以 0 的情况。
我正在尝试做这样的事情:
"INSERT INTO table (time_stamp, in_bytes, out_bytes, pct) VALUES(date + "," + inBytes + "," + outBytes + ", out_bytes/in_bytes) ON DUPLICATE KEY UPDATE in_bytes = in_bytes + 0, out_bytes = out_bytes + 0, pct = out_bytes/in_bytes;"
不幸的是,如果 in_bytes 为 0,我会收到以下错误:“错误 1048 (23000):列‘pct’不能为空”。
对此有什么办法吗?以一种超越我们原始方法的方式提高性能?我曾考虑过使用触发器来计算 pct 字段,但这似乎不会提高性能。
最佳答案
您可以使用任何您想要的表达方式。在这种情况下,您可以使用 IF(condition,value when true,value when false)
:
pct = IF(in_bytes != 0, out_bytes/in_bytes, 42)
或者对于奖励积分,您可以使用 COALESCE 做同样的事情:
pct = COALESCE(out_bytes/in_bytes, 42)
关于mysql - 是否可以将根据条件计算的值插入到 mysql 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31433921/