2017-12-15 5 views
-1

クライアントの1人がmysqlにストアプロシージャを書くように要求しています。これは、1つのデータに1つのリソースしかアクセスしないように指示しています。最初に来る人は最初にロックをとり、そのフラグを変更して、他のリソースがテーブル内のこのデータ行をロックできないようにします。 ストアプロシージャが書き込まれます。銀行取引の管理に似ていますが、私はどのようにそれのためのストアドプロシージャを記述するか見当もつかない、任意のヘルプは非常にそれは、mysqlのデータのアトミック性

+0

あなたは何について手掛かりを持っていますか? – Strawberry

+1

基本的な概念について質問しています。あなたはストアドプロシージャとトランザクションに関するチュートリアルを見つけてください。 SOはQ&Aサイトです。人々が複数のチュートリアルを投稿することは期待できません。トランザクションやロックについて理解していない*場合は、アプリケーション全体をフリーズすることになります。 –

+0

@PanagiotisKanavos私は店舗手続きを書いていないのですが、そのようなものは、この種のシナリオにはトランザクションが含まれていて、ACIDプロパティを要求しているようなものではありません。 – Mavericks

答えて

0
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); 

これは私が期待していたものです。よく事前に、感謝を感謝し、それを解決します魅力のように働いた

関連する問題