mysql - MySql 在特定条件下插入重复、替换或忽略时
问题描述
我想创建一个 MySql 查询以插入到表中,当发生重复时,我想检查现有记录以确定是 REPLACE 还是 IGNORE。当现有记录的某个字段为 0 时执行 REPLACE,否则执行 IGNORE。如何以高效的方式做到这一点?
解决方案
假设您的“检查”列(更新发生时应该为 0 的列)是 c2,您可以执行以下操作:
INSERT INTO table (id, c2, c3, c4)
VALUES
(1, 'val2', 'val3', 'val4')
ON DUPLICATE KEY UPDATE
c2 = IF(c2 = 0, VALUES(c2), c2),
c3 = IF(c2 = 0, VALUES(c3), c3),
c4 = IF(c2 = 0, VALUES(c4), c4);
它基本上是一个INSERT ... IGNORE
if c2 != 0
,否则是一个INSERT ... UPDATE
,我认为这就是你想要的。
当然你可以根据你的需要调整它,不需要更新所有的列,或者对每一列使用相同的检查
推荐阅读
- php - PHP 客户端和 Golang 服务器中的 Apache thrift 错误
- android - In App Billing 部分中的“状态”是什么意思?
- python - TypeError:'builtin_function_or_method'和'int'的实例之间不支持'>'
- model - 通过引用(外键)获取数据,该引用是通过关系环回的对象数组
- c++ - __declspec(align(#)) 在堆上
- keras - 内核大小应该与一维卷积中的字大小相同吗?
- c# - Bot Builder SDK 4 如何使用附件?
- javascript - 如果文件名有括号(),文件上传不上传
- python - Python dict 到 MySQL executemany
- angular - Angular 6 步进模块生成