У меня есть следующая процедураMysql Процедура есть два раза
DELIMITER $$
CREATE PROCEDURE providerDistributor(IN cronHash VARCHAR(255), IN lastProccess DATETIME)
BEGIN
SET @cronHashVar = cronHash;
SET @lastProccess = lastProccess;
SET @targetiDS = (SELECT `id` AS targetiDS FROM `messages_temp` WHERE
`direction` = "3"
AND `reciever_id` = 0
AND `status`="1"
AND `has_providers` = "1"
AND `reserved_bebs` = 0
AND `maximum_cost` > 0
AND `count_numbers`>0
AND (`app_mobile_numbers`>0 OR `sms_mobile_numbers`>0)
AND (`cron_hash`="" OR `cron_hash` IS NULL) ORDER BY `id` ASC LIMIT 1);
SET @sql_text = concat('UPDATE `messages_temp` SET `cron_hash` = "',@cronHashVar,'",`last_process` = "',@lastProccess,'",`cron_name` = "providerDestributor" WHERE id = @targetiDS AND (cron_hash="" OR cron_hash IS NULL)');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SELECT SQL_NO_CACHE * FROM messages_temp WHERE [email protected];
END$$
DELIMITER ;
это следует обновить только одну запись, но она всегда обновляет две записи, как только я добавить последний запрос
'SELECT SQL_NO_CACHE * FROM messages_temp WHERE [email protected];
пожалуйста, вы можете помочь I нужно как только запись только обновиться.
Я добавляю ограничение 1 в конце инструкции обновления, он все еще обновляет 2 записи, если я вызываю процедуру один раз, но если вы удалите следующий запрос (SELECT SQL_NO_CACHE * FROM messages_temp WHERE cron_hash = @ cronHashVar;), он будет обновляться один раз запись, почему? – user2876390
Идентификатор первичный, поэтому одна запись должна быть аппроксимирована вызовом процедуры, лимит после обновления есть – user2876390
@ user2876390. , , Если 'id' уникален, то в этом выражении может быть обновлено не более одной строки. Почему, по-вашему, обновляется несколько строк? –