我知道ON DUPLICATE UPDATE
和Id(Auto Generated), EmpId, EmpName, Salary, Version
12 ABW72 John 1000 100
,如果我的员工存在,我想插入的内容如果确实存在,则根据条件更新一些列。
例如:我的表格列
EmpId
Unique Index
不是主键,但有ABW72
现在如果INSERT
不存在,UPDATE
就行了
EmpId = ABW72
仅在version is > 20
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.
时存在 var webpack = require('webpack');
module.exports = {
entry: [
'babel-polyfill',
'./index.js',
],
output: {
filename: 'bundle.js'
},
module: {
loaders: [
{
test: /\.js$/,
loader: 'babel',
exclude: /node_modules/,
query: {
presets: ['es2015'],
plugins: [
["babel-plugin-transform-builtin-extend", {
globals: ["Array"],
}]
]
}
},
]
},
}
。此版本是存储在DB中的版本。如何在MySql中做到这一点。
我们尝试使用类似这样的应用程序:
{{1}}
此处的问题在于步骤2,因为如果使用Insert,则会导致高并发负载的异常,而Insert Ignore会导致错过有效的更新。
答案 0 :(得分:6)
您可以在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);