скорость слабая на новых версиях
Как в SQL сделать сразу несколько запросов в одном действии
-
@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 % в первые мускуль поставили.
Так по ссылке есть конкретный пример шаг за шагом.
- создаем функцию, которая выводит "Hello, {some value}!", на вход которой можно подать строку до 20 символов(
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) - создаем функцию, которая выводит "Hello, {some value}!", на вход которой можно подать строку до 20 символов(
-
@sergerdn Честно говоря не понял.
Задача такая. Есть многопоток. Каждый поток пытается ухватить запись, и чтоб другие ее не трогали.
Мой вариант - сразу лочить не залоченную запись. И дальше с ней работать.
Ваш вариант проще?

