MariaDB, Удалить с условием не работает - PullRequest
0 голосов
/ 30 ноября 2018

Я создаю приложение и использую MariaDB в качестве базы данных.У меня есть таблица "kick_votes".Его первичный ключ состоит из трех полей:

  • user_id
  • group_id
  • voice_id

Мне нужно удалить строки, где user_id AND group_idвыполнить мои условия или просто voice_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;

Я получаю сообщение об ошибке:

Вы используете безопасный режим обновления и пытаетесь обновить таблицу без WHEREкоторый использует столбец KEY.

Почему он не работает?

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Попробуйте этот 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
          );
0 голосов
/ 30 ноября 2018

Похоже, что наличие ключа на самом деле не влияет на ошибку.Из источников 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;
...