我知道 REPLACE
和 ON DUPLICATE UPDATE
,问题是我想在我的员工存在时插入,并在存在时更新一些列,但基于条件。
例如:我的表格列
Id(Auto Generated), EmpId, EmpName, Salary, Version
12 ABW72 John 1000 100
EmpId
不是主键,但有一个Unique Index
现在如果 ABW72
不存在,INSERT
就可以了
和 UPDATE
如果 EmpId = ABW72
仅当 version > 20
时存在。此版本是存储在数据库中的版本。如何在 MySql 中做到这一点。
我们在应用程序方面尝试了这样的事情:
Step 1: Select with a lock on EmpId=ABW72. A lock would be taken if it exists.
Step 2: If Step1 returned 0 records, Insert Ignore OR Insert
Step 2: If Step1 returned 1 record, just update based on the condition.
这里的问题出在第 2 步,因为如果使用 Insert 会导致高并发加载异常,而 Insert Ignore 会导致错过有效更新。
最佳答案
您可以在 on duplicate key update
子句中使用条件表达式。这是一个例子:
insert into mytable(EmpId, EmpName, Salary, Version)
values ($EmpId, $EmpName, $Salary, $Version)
on duplicate key update
EmpName = (case when Version > 20 then Values(EmpName) else EmpName end),
Salary = (case when Version > 20 then Values(Salary) else Salary end);
关于mysql - 在不存在时插入,但在条件存在时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35133752/