본문 바로가기

나는개발자다/기타

MySql procedure transaction

한 3시간 삽질했다.

DB가 transaction이 안 되는 문제가 있다니.. 문제는 mysql engine의 다양성때문이다.


대표적으료MyISAM, InnoDB가 있다.  이 외 몇 가지 DB Engine이 있지만 오로지 InnoDB만 Transaction을 지원한다.


1. 현재 지원하는 engine 보는 방법

show engines;


2. table에서 사용하는 engine 확인

show table status where name='table_name';


3. engine 변경하기.

alter table table_name engine=innodb;   <-- table_name에 ' ' 가 없다.



4. procedure 기본 구조

 
BEGIN
        
    declare exit handler for sqlexception 
    
    begin
      rollback;
    end;
        
    start transaction;
      
      insert      into ( 
            
        )values (
            
         );
       
        insert   into users(
           
        )VALUES( 

        );
        
    COMMIT;
      
END;

5. java와의 연동 문제점.

java에서 

try{


}catch(Exception e){

System.out.println(e.printStackTrace());

}

에서 exception 에서 잡히지 않는 문제가 나온다.

이럴 경우  procedure

CREATE PROCEDURE `procedure`(                                                                      
                                   IN IN_VALUE                  INTEGER,
                                    OUT OUT_VALUE           INTEGER
                                    )

OUT_VALUE등 procedure parameteter를 이용해야 한다.