if eachenv=="DEV01" or "DEV02":
Означает, если одно из следующего:
eachenv
равно "DEV01"
"DEV02"
Ну, а как насчет "DEV02"
? Он существует, так что вариант условия будет «правдивым», поэтому ваш if
всегда пройдет.
Это не то, как работают цепные условия.
Вы имели в виду:
if eachenv=="DEV01" or eachenv=="DEV02":
Теперь, если одно из следующего:
eachenv
равно "DEV01"
"DEV02"
Yay!
Можно создать процедуру, которая делает это:
CREATE PROCEDURE prc_get_task (in_guid BINARY(16), OUT out_params VARCHAR(200))
BEGIN
DECLARE task_id INT;
SELECT id, out_params
INTO task_id, out_params
FROM tasks
WHERE guid = 0
LIMIT 1
FOR UPDATE;
UPDATE task
SET guid = in_guid
WHERE id = task_id;
END;
BEGIN TRANSACTION;
CALL prc_get_task(@guid, @params);
COMMIT;
При поиске единого запроса затем, этого не может произойти. ОБНОВЛЕНИЕ функционально-специализировано возвращает просто количество объектов, которые были обновлены. Точно так же ИЗБРАННАЯ функция не изменяет таблицу, только возвращает значения.
Используя процедуру действительно превратит его в единственную функцию, и может быть удобно, если блокировка является беспокойством о Вас. Если Ваше самое большое беспокойство является сетевым трафиком (т.е.: передача слишком многих запросов), затем используют процедуру. Если Вы касаетесь, перегрузка сервера (т.е.: DB также упорно работает), затем, дополнительные издержки процедуры могли сделать вещи хуже.
Я не знаю о единственной части вызова, но что Вы описываете, блокировка. Блокировки являются существенным элементом реляционных баз данных.
я не знаю специфических особенностей блокировки строки, чтения его и затем обновления его в MySQL, но с небольшим количеством чтения , mysql блокируют документацию , Вы могли сделать все виды основанных на блокировке манипуляций.
пост-ГРЭС documenation блокировки имеют яркий пример, описывающий точно, что Вы хотите сделать: заблокируйте таблицу, считайте таблицу, измените таблицу.