2017-12-15 1 views
-1

클라이언트 중 하나가 mysql에 저장 프로 시저를 작성하라는 요청을 받았습니다.이 프로 시저에서는 하나의 데이터 만 하나의 리소스로 액세스해야한다고 명시되어 있습니다 (해당되는 경우에도 여러 리소스가 데이터를 읽을 준비가 되었음). , 누구든지 먼저 올 자물쇠를 먼저 취하고 다른 리소스가 테이블의이 데이터 행을 잠글 수 없도록 플래그를 변경합니다. 저장 프로 시저가 작성되어 있어야합니다. 은행 트랜잭션 관리와 유사하지만, 내가 어떻게에 대한 저장 프로 시저를 작성하는 단서가 없다, 어떤 도움은 매우 그것은mysql의 데이터의 원 자성

+0

그래서 단서가 있습니까? – Strawberry

+1

기본 개념을 묻습니다. 저장 프로 시저 및 트랜잭션에 대한 자습서를 찾아야합니다. * 빠른 대답을 요구하지 않습니다. 그래서 Q & A 사이트이기 때문에 사람들이 멀티 페이지 튜토리얼을 게시 할 수는 없습니다. 트랜잭션 또는 잠금에 대해 이해하지 못하면 전체 응용 프로그램이 중단됩니다. –

+0

@PanagiotisKanavos 내가 Store 프로 시저를 작성하지 않은 것 같지 않습니다. 트랜잭션과 관련된 시나리오와 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); 

이 내가 기대 한 것입니다. 사전에, 감사를 감사하고이를 해결할 수매력처럼 일 했어요

관련 문제