Mysql INSERT ...在重复键更新时,如果值不同,则删除

时间:2016-11-30 08:03:48

标签: mysql insert duplicates

我有一组按钮,一次只能选择其中一个按钮,它们可以关闭,这意味着如果用户再次选择一个按钮,则应取消选择该按钮。
假设我的表位于buttons_iduser_idvalue列,buttons_iduser_id是主键(连接在一起)。
所以我想

    如果valuebuttons_id组合不存在(user_id),则
  • 将选定的insert into插入到表格中
  • 如果buttons_iduser_id组合存在且值不同(on duplicate key update
  • ,则更新记录
  • 如果存在buttons_iduser_id组合并且值相同(delete ?
  • ,则删除记录

我该怎么做才是一个查询?我可以在case内使用on duplicate key update吗?

1 个答案:

答案 0 :(得分:1)

您需要使用事务(要求您的表使用事务存储引擎,例如InnoDB):

  1. 开始交易。这通常最好通过适当调用您正在使用的任何API来完成,但如果您绝对必须在SQL中执行,那么您可以这样做:

    var pattern = /((https|http|ftp){1}:\/\/)?(www\.)?\w+\.\w{2,4}/ig;
    var test = ['http://www.some.com/NotRelevant',
      'https://www.some.com/NotRelevant',
      ':/www.some.com/NotRelevant',
      'www.some.com/NotRelevant',
      'some.com/NotRelevant'
    ];
    for (var t = 0; t < test.length; t++) {
      console.log(test[t], test[t].match(pattern));
    }
  2. 发出locking read以发现当前值:

    START TRANSACTION
    
  3. 根据上面收到的结果,在客户端应用程序中执行业务逻辑,即。问题SELECT `value` FROM `table` WHERE buttons_id = ? AND user_id = ? FOR UPDATE 如果没有结果,INSERT如果UPDATE不同,value如果DELETE匹配。

  4. 提交交易。同样,这通常最好通过API调用完成,但如果您在SQL中执行它:

    value