반응형
Transaction (트랜잭션)
우선사항 : mysql 이 transaction 을 지원하는 엔진을 가지고 있어야하며 작업하는 테이블의 타입이 transaction을 지원하는 타입이어야한다. transaction을 지원하는 엔진으로는 innoDB가 있다. 설정법은 아래를 참고하라.
http://wiz.pe.kr/444
http://aladdin07.blog.me/150137323714
방법 1.만약 다수의 sql문이 하나의 트랜잭션이라면 (transaction 은 검색해보도록) sql 문 실행전에 START TRANSACTION 을 호출하고 트랜잭션이 완벽히 수행되면 COMMIT , 트랜잭션의 요소중 하나라도 실행되지 않았다면 ROLLBACK을 호출하면 좋다.
방법 2. autocommit 옵션을 끄고 mysql_query() 후에 수행이 완벽하면 mysql_commit() 호출하여 저장 하면되고 수행이 완벽하지 않으면 mysql_rollback() 호출하여 복구하면 된다.
방법 3. mysql_query("BEGIN") 후에 실행시킬 sql문을 수행후 수행이 완벽하면 mysql_query("COMMIT") 수행이 완벽하지 못하면 mysql_query("ROLLBACK") 하면된다.
참고 : http://www.yolinux.com/TUTORIALS/MySQL-InnoDb-Transactions-ForeignKeys.html
http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqltransaction.html
http://dev.mysql.com/doc/refman/5.1/en/commit.html
테스트 결과 mysql_query("START TRANSACTION") 으로는 영향을 주지 않습니다.
mysql_autocommit(&mysql, false); // start transaction
mysql_commit() or mysql_rollback()
mysql_autocommit(&mysql, true); // end transaction
저는 C++ 와 mysql을 연동할 때 C library를 사용하고, 아래와 같은 형식으로 사용합니다.
?
1
2
3
4
5
6
7
try {
mysql_query(&conn, "BEGIN");
mysql_commit(&conn);
} catch {
mysql_rollback(&conn);
}
그런데 희안하게 rollback이 되지 않는 현상을 발견하여 이리저리 찾아본 결과
mysql_query(&conn, "BEGIN")이 되지 않는다는 것을 알았습니다.
제가 테스트한 환경은 windows8 pro, visual studio 2012 (november CTP), mariaDB 10.0.4 입니다.
어떤 환경인지는 모르겠으나 포럼에도 안된다는 글을 봤습니다.
그래서 저는 mysql에 접속할 때 SET autocommit=OFF 를 해주고 사용하고 있습니다.
mysql_query("START TRANSACTION")
-> mysql_query("BEGIN TRANSACTION")
mysql_query("BEGIN")
http://krids.tistory.com/184
http://onecellboy.tistory.com/216
https://www.google.co.kr/search?q=autocommit&oq=autocommit+&aqs=chrome..69i57j0l5.6941j0j4&sourceid=chrome&es_sm=93&ie=UTF-8#lr=lang_ko&newwindow=1&q=mysql_query(%22START+TRANSACTION%22)
http://database.sarang.net/?inc=read&aid=29772&criteria=mysql&subcrit=&id=&limit=20&keyword=lqez&page=10
입력시작시간:
모바일 스크립트 :
반응형
'프로그램' 카테고리의 다른 글
mysql alter change, transaction. (0) | 2014.09.11 |
---|---|
chromium 을 전체화면 모드( F11 누르면 나오는 화면 ) 에서 실행하는 방법. (2) | 2014.09.10 |
linux 에서 curl 컴파일 안 될 때. (0) | 2014.08.25 |
자바에서 replaceAll 쓸 때, 특수문자 치환법 (0) | 2014.08.25 |
라즈베리파이 서버 프로젝트 (2) | 2014.08.03 |