mysql" upsert"用两个不同的唯一列查询表

时间:2015-03-03 21:49:22

标签: c# mysql

我试图将一个MySQL查询写入" upsert"进入下表:

ID (auto_int) | Code (unique) | Name (unique) | LastMod | LastBy | Other fields
========================================================================
1             | Code1         | Name1         |2015-2-2 |'system'|...
2             | Code2         | Name3         |2015-2-17|'system'|...
  1. 如果代码和名称不存在,请插入
  2. 如果存在代码或(独占)名称,请更新该名称/代码以匹配重复
  3. 如果存在代码和名称,则在同一行中更新"其他"字段
  4. 如果存在代码和名称,但在不同的行中,什么都不做(在C#中检测为错误)
  5. 我需要选择插入/更新的行(带有ID)(#4可以在C#中通过返回" 0"行并将其视为"错误&#34来处理;)
  6. 如果事务中的任何SQL抛出错误,请回滚(我希望它按原样执行此操作,但我想确认是这种情况)。
  7. 我来自SqlServer的背景,我真的很难不使用If语句。

    这需要是一个SQL块(不是函数/ SP),理想情况下是事务安全的。 (具有START TRANSACTION; / COMMIT;)

    我开始于:

    START TRANSACTION;
    SET @lastModified = '2015-02-18 22:21:51';
    SET @Code = 'code4';
    SET @Name = 'name4';
    SET @ModifiedBy = 'system';
    UPDATE test1.catalog SET LastModified = @lastModified, ModifiedBy = @ModifiedBy WHERE Code = @Code AND Name = @Name;
    INSERT IGNORE INTO test1.catalog (LastModified, ModifiedBy, Code, Name) VALUES (@lastModified, @modifiedBy, @code, @name);
    #???
    SELECT * FROM test1.catalog WHERE name = @name AND code = @code;
    COMMIT;
    

    谢谢!

0 个答案:

没有答案