사이트 내 전체검색
mysql로 트랜젝션구현하기
로빈아빠
https://cmd.kr/server/1046 URL이 복사되었습니다.

본문

트랜젝션에 관련된 질문은 많은데 정작 답변이 하나도 없어서
제가 글을 올립니다.

우선 mysql에서 트랜젝션(commit,rollback)을 사용하기 위해서는
몇가지 조건이 필요합니다.
(저의 경우는 window에서만 실행해봤습니다. 아래 내용은 윈도우2000에서 설정입니다. )


1. <a href="http://www.mysql.com/downloads/mysql-max-3.23.html">MySQL 3.23.46a 다운로드 (max버젼)</a>

2. mysql을 설치합니다.

3. my.ini파일을 찾아서 다음 코드를 추가합니다.
  win2000의 경우에는 c:winnt 디렉토리에 이 파일이 존재합니다.
[mysqld]
어쩌고 저쩌고.............. 이런 설정 다음에
다음 코드 추가


innodb_data_file_path = ibdata1:30M;ibdata2:30M 
innodb_data_home_dir = c:ibdata
set-variable = innodb_mirrored_log_groups=1
innodb_log_group_home_dir = c:iblogs
set-variable = innodb_log_files_in_group=3
set-variable = innodb_log_file_size=30M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
#.._arch_dir must be the same as .._log_group_home_dir
innodb_log_arch_dir = c:iblogs
innodb_log_archive=0
set-variable = innodb_buffer_pool_size=70M
set-variable = innodb_additional_mem_pool_size=10M
set-variable = innodb_file_io_threads=4
set-variable = innodb_lock_wait_timeout=50


위의 코드에서 innodb_data_file_path = ibdata1:30M;ibdata2:30M  이부분은 사용자가 직접 자신의 환경에 맞게 정의해야합니다.
저는 단순한 테스트를 위해 30메가로 잡았답니다. 대충 이정도로 잡고 실험해보시고 동작한다면 메뉴얼을 잘 읽어보시고 다시 잡으세요.


4. 위의 코드에 있는 디렉토리 두개를 직접 생성해야합니다.
innodb_data_home_dir = c:ibdata
innodb_log_arch_dir = c:iblogs
즉 C 디렉토리 밑에 ibdata와 iblogs라는 이름의 디렉토리를 만들어야합니다. 주의 할 점은 이 두 디렉토리 밑에 자동적으로 my.ini파일에서 설정한
파일들이 mysql구동시 자동으로 생성되므로 충분히 큰 용량있어야합니다.


5. 이제 대충 설정이 끝났습니다.
윈도우 콘솔 창에서
c:mysqlbin 로 이동한 다음.  아래 명령을 실행시킵니다.

mysqld-max --standalone --console

그러면 잠시 컴퓨터가 '지지직 거리면서 한동안 뭔가 하고 있다는 느낌(?)이 드실겁니다. 
어쩌고 저쩌고
InnoDB: started
mysqld-max:ready for connections 라는 것이 화면에 뜬다면
성공적으로 이노디비가 동작하는 겁니다.
(추카 추카  ^^)
이 단계에서 실패하신 분은 my.ini파일을 다시 설정하세요.
대부분 디렉토리를 생성 안했거나, 파일의 용량을 너무 크게 하셔서 용량초과로 인해 생긴 것일 겁니다.  실패하셨다면 기존에 자동으로 생성된 파일을 제거하고 다시 하세요.

6. 이제 mysql 데몬이 떠 있는 상태이므로 다른 콘솔 창을 열어서
mysql -u root -p test 로 들어가서
이노디비 type의 table을 만듭니다.

CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A)) TYPE = InnoDB;
기존에 table을 만드는 방식과 동일한데, 마지막에 TYPE = InnoDB 이라는 것이 더 붙습니다.
이렇게 생성한 다음..

다음과 같은 php코드를 작성하세요.

<?

$conn = mysql_connect("localhost","사용자","비밀번호") or die("fail");
$status = mysql_select_db("test");
if(!$status) {
echo("fail");
exit;
}

#### 자동 commit 기능 방지 ###########################
mysql_query("set autocommit=0");

$query = "insert into cus (a,b) values(3,'dd')";
$result = mysql_query($query);
if(!$result) {
echo(mysql_error());
exit;
}
##### 위에서 실행한 명령을 commit 하여 디비에 반영 #######
  mysql_query("commit");

###### rollback 하면 원상복구 ############################
// mysql_query("rollback");

?>

한번은 commit 해서 디비에 입력한 값이 있는 확인하세요.
한번은 rollback 해서 디비에 입력한 값이 없는지 확인하세요

출처 : http://qdata.co.kr/bo/bbs/board.php?bo_table=myt&wr_id=48

댓글목록

등록된 댓글이 없습니다.

1,139 (2/23P)

Search

Copyright © Cmd 명령어 18.117.119.183