MariaDB,在条件不起作用的情况下删除

时间:2018-11-30 10:44:22

标签: mariadb conditional-statements sql-delete

我正在构建一个应用程序,并使用MariaDB作为我的数据库。 我有一张桌子“ kick_votes”。它的主键由三个字段组成:

  • user_id
  • group_id
  • vote_id

我需要删除其中user_id和group_id满足我的条件的行或仅删除vote_id的行。 我启用了配置,必须使用WHERE子句中的键列来解决安全问题。

这是正常工作:

 DELETE FROM kick_votes WHERE (user_id=86 AND group_id=10);
 DELETE FROM kick_votes WHERE vote_id=2;

但是我不想使用两个语句,但是以下操作不起作用:

DELETE FROM kick_votes WHERE (user_id=86 AND group_id=10) OR vote_id=2;

我得到了错误:

  

您正在使用安全更新模式,并且尝试更新没有        使用KEY列的位置。

为什么不起作用?

2 个答案:

答案 0 :(得分:0)

似乎存在密钥实际上并不会影响该错误。 从mariadb来源,mysql_delete

const_cond= (!conds || conds->const_item());
safe_update= MY_TEST(thd->variables.option_bits & OPTION_SAFE_UPDATES);
if (safe_update && const_cond)
{
  my_message(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE,
             ER_THD(thd, ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE), MYF(0));
  DBUG_RETURN(TRUE);
}

所以唯一的变种是关闭安全模式:

set @@sql_safe_updates= 0;

答案 1 :(得分:0)

尝试一下这个Kludge:

DELETE FROM kick_votes
    WHERE id > 0    -- assuming this is your PRIMARY KEY
      AND (    (user_id=86 AND group_id=10)
            OR vote_id=2
          );