Атомность данных в MySQL

Один из клиентов попросил нас написать процедуру хранения в mysql, которая гласит, что к одним данным должны быть доступны только одни ресурсы (даже если их окажется несколько ресурсов, готовых для чтения данных, кто бы ни пришел первым, он получит блокировку сначала и изменил бы его флаг так, чтобы другие ресурсы не могли блокировать эту строку данных в таблице. Для нее должна быть записана процедура хранилища, я считаю, что она похожа на управление банковскими транзакциями, но у меня нет Понять, как написать хранимую процедуру для нее, любая помощь будет высоко оценена, заранее спасибо.

1 ответ

Решение
    Step : 1

CREATE TABLE `test_db`.`Jobs` (
  `id` INT NOT NULL,
  `JOB` VARCHAR(45) NOT NULL,
  `status` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `id_UNIQUE` (`id` ASC));

Step : 2


DELIMITER $$
create procedure aabraKaDaabra(IN ids INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
START TRANSACTION;
select id from Jobs where id=ids for update;
update Jobs set status = 'Submitted' where id=ids;
commit;
END$$; 

Step : 3


select * from test_db.Jobs order by id desc;

Note:
 Make sure that you have inserted a few of the value for the table.

Step : 4
call test_db.aabraKaDaabra(1);

Это то, что я ожидал и решил, это сработало как шарм

Другие вопросы по тегам