插入时不存在但如果条件更新则更新

时间:2016-02-01 15:02:25

标签: mysql sql

我知道ON DUPLICATE UPDATEId(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会导致错过有效的更新。

1 个答案:

答案 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);