@vsyacheskiy через глоб. перем.
3d99fbcc-4896-4713-a68d-9e82e2277c5a-image.png
5b14ee34-f857-43c4-b0ae-46463594e575-image.png
но лучше через ресурс наверно
@Bigma ох, почему вы акцентируете внимание на запросах? Они по отдельности проходят - значит они правильные (как мне кажется).
Если вписать например так:


то есть самый типовой запрос -

то выдаст ровно такую же ошибку.
Отладку сейчас сейчас скину, но не понимаю причём тут она.
@Shogo Я акцентирую потому, что не вижу пока, то что в итоге посылает модуль. Для этого нужно перед запросом добавить кубик включить отладку . В логи после этого будешь видеть что посылает бас. Вероятно вырезается точка с запятой, в таком случае и мускуль так же тебя пошлет. Как нормализует запросы пхп май админ я не в курсе.
Предполагаю, что так и задуманно, так как ответ то надо получить для каждого запроса. А переменная одна.
Делай по одному, по хорошему то все равно проверять надо прошел запрос или нет. Вдруг база отвалилась или сеть легла...
Как вариант сделай поле Лок. И сразу за селектом делай запись в лок, а дальше хоть вечность над ней трудись, другие не тронут, потому что Лок.
Точнее наоборот - сначало лок
@Shogo said in Как в SQL сделать сразу несколько запросов в одном действии:
@Bigma вы опять о том же - пример для того чтобы максимально упросить запрос, напиши я сложный - вариантов дискуссии было бы больше, а пришло бы к тому же - что там доли секунды )
Если что-то работает не как ожидается, то ищется work around. В случае с select и потом delete он есть. Я не уверен, что нет универсального обходного пути на "ну непременно хочу делать два запроса сразу". Ну не работает оно вот как ты хочешь.
Вариантов тут два:
Если нужна какая-то консистентность запросов, есть транзакции. Все равно в пачке запросов, что идут друг за другом, нет никаких гарантий. А в транзакциях есть.
Есть еще вариант хранимых процедур на стороне движка базы данных, тогда дергание чего-то в запросе это одна строчка, а под капотом целая бизнес логика может быть.
@Bigma said in Как в SQL сделать сразу несколько запросов в одном действии:
@sergerdn Вы прям сильно завернули, банковские операции тут что-ли 😂 ну тогда уже рабочий пример в студию, мне тоже стало интересно.
Чего пример? Еще есть функции в базе данных, они могут вернуть данные, а процедуры нет.
https://stackoverflow.com/questions/3744209/mysql-stored-procedure-vs-function-which-would-i-use-when
Я имел ввиду пример скрипта, шаг за шагом, тут 99 % в первые мускуль поставили.
@Bigma said in Как в SQL сделать сразу несколько запросов в одном действии:
Я имел ввиду пример скрипта, шаг за шагом, тут 99 % в первые мускуль поставили.
Так по ссылке есть конкретный пример шаг за шагом.
CHAR(20)).SELECT hello(name) FROM names;) и получаем ожидаемый результатCREATE FUNCTION hello (s CHAR(20))
RETURNS CHAR(50) DETERMINISTIC
RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected (0.00 sec)
CREATE TABLE names (id int, name varchar(20));
INSERT INTO names VALUES (1, 'Bob');
INSERT INTO names VALUES (2, 'John');
INSERT INTO names VALUES (3, 'Paul');
SELECT hello(name) FROM names;
+--------------+
| hello(name) |
+--------------+
| Hello, Bob! |
| Hello, John! |
| Hello, Paul! |
+--------------+
3 rows in set (0.00 sec)
@sergerdn Честно говоря не понял.
Задача такая. Есть многопоток. Каждый поток пытается ухватить запись, и чтоб другие ее не трогали.
Мой вариант - сразу лочить не залоченную запись. И дальше с ней работать.
Ваш вариант проще?
@Bigma said in Как в SQL сделать сразу несколько запросов в одном действии:
@sergerdn Честно говоря не понял.
Задача такая. Есть многопоток. Каждый поток пытается ухватить запись, и чтоб другие ее не трогали.
Мой вариант - сразу лочить не залоченную запись. И дальше с ней работать.
Ваш вариант проще?
Есть очень простой вариант делать SELECT FOR UPDATE .
То есть:
used, по умолчанию 0used 0 и СРАЗУ в это же запросе менять used на 1. Это как раз делает SELECT FOR UPDATE .Я так делал, там будут нюансы, связанные с множеством блокировок, но если нет стопицот запросов в секунду, они будут незаметны. Так как SELECT FOR UPDATE залочит всю таблицу на INNODB.
https://dev.mysql.com/doc/refman/8.0/en/select.html