Атомность данных в 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);
Это то, что я ожидал и решил, это сработало как шарм