Как в SQL сделать сразу несколько запросов в одном действии

Поддержка
  • @Bigma то есть если сделать 2 действия выполнить запрос, и туда вбить по очереди:

    1. SELECT * FROM KUKI LIMIT 1;
      а во второе
    2. DELETE FROM KUKI LIMIT 1;
      Вот как это выглядит: https://prnt.sc/1zl2lps

    То всё работает, без каких либо проблем.
    А вот если эти две строки вбить в одно действие(https://prnt.sc/1zl2pwm) - то даёт ошибку:
    [917526596] [22:50:32] Поток №1 : SequelizeDatabaseError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE FROM KUKI LIMIT 1' at line 2

    Я не понимаю, что я один на всём форуме попытался два запроса сразу впихнуть? )

  • Вы отладку sql включили? Кроме вас ваши скриншоты никто не видит, загрузите или на форум или в паблик источник

  • @Bigma что ж вы молчали ) а что лайтшот уже не пашет?
    Вот вариант когда по отдельности: Screenshot_17.png
    В таком варианте всё работает.
    А вот те же строки только вместе:
    Screenshot_18.png
    В этом случае выдаёт ошибку, и не важно какие там строки, я пробовал втыкать любые.

  • @Shogo Кубик отладка включена покажи. И серенький вопросик на скрине найди.

  • @Shogo и зачем в первом запросе куки в ковычках?

  • @Shogo У тебя таблица капсом в базе? Обычно строчными указывают в запросе.

  • @Bigma ох, почему вы акцентируете внимание на запросах? Они по отдельности проходят - значит они правильные (как мне кажется).
    Если вписать например так:
    Screenshot_19.png
    Screenshot_20.png
    то есть самый типовой запрос -
    Screenshot_21.png
    то выдаст ровно такую же ошибку.
    Отладку сейчас сейчас скину, но не понимаю причём тут она.

  • @Bigma Screenshot_22.png
    отладка

  • @Shogo Я акцентирую потому, что не вижу пока, то что в итоге посылает модуль. Для этого нужно перед запросом добавить кубик включить отладку . В логи после этого будешь видеть что посылает бас. Вероятно вырезается точка с запятой, в таком случае и мускуль так же тебя пошлет. Как нормализует запросы пхп май админ я не в курсе.

  • @Bigma я ж вот скинул )
    И если была бы ошибка в запросе - то действия по отдельности бы не проходили

  • @Shogo Ну тогда только Ghost может ответить

  • Предполагаю, что так и задуманно, так как ответ то надо получить для каждого запроса. А переменная одна.

  • @Bigma думаю что с удалением строки например или обновлением будет тоже самое.
    Плюс там же написано:
    Screenshot_23.png

  • Делай по одному, по хорошему то все равно проверять надо прошел запрос или нет. Вдруг база отвалилась или сеть легла...

  • @Bigma надо сразу(без блокировки базы может вызвать неприемлемые ошибки) ) по одному бы давно уже сделал ))

  • @Shogo там миллисекунды, а в примере который ты даёшь, удаляется вообще любая запись и не факт что та которую выбрал.

  • @Bigma вы опять о том же - пример для того чтобы максимально упросить запрос, напиши я сложный - вариантов дискуссии было бы больше, а пришло бы к тому же - что там доли секунды )

  • Как вариант сделай поле Лок. И сразу за селектом делай запись в лок, а дальше хоть вечность над ней трудись, другие не тронут, потому что Лок.

    Точнее наоборот - сначало лок

  • @Shogo said in Как в SQL сделать сразу несколько запросов в одном действии:

    @Bigma вы опять о том же - пример для того чтобы максимально упросить запрос, напиши я сложный - вариантов дискуссии было бы больше, а пришло бы к тому же - что там доли секунды )

    Если что-то работает не как ожидается, то ищется work around. В случае с select и потом delete он есть. Я не уверен, что нет универсального обходного пути на "ну непременно хочу делать два запроса сразу". Ну не работает оно вот как ты хочешь.
    Вариантов тут два:

    1. бить запросы по одному
    2. биться головой об стенку почему не работает, как тебе хочется

    Если нужна какая-то консистентность запросов, есть транзакции. Все равно в пачке запросов, что идут друг за другом, нет никаких гарантий. А в транзакциях есть.
    Есть еще вариант хранимых процедур на стороне движка базы данных, тогда дергание чего-то в запросе это одна строчка, а под капотом целая бизнес логика может быть.

  • @sergerdn Вы прям сильно завернули, банковские операции тут что-ли 😂 ну тогда уже рабочий пример в студию, мне тоже стало интересно.