E-book (3) 트랜잭션

이율곡·2023년 1월 17일
0

Project

목록 보기
5/15
post-thumbnail

MySQL 트랜잭션

테이블

이번 프로젝트에서 트랜잭션이 서너군데 필요하다. 그 중 하나가 회원가입을 할 때 회원(member)테이블과 회원도서정보(member_book_inf)을 동시에 생성해야 되기 때문이다.

CREATE TABLE member_book_inf (
userid VARCHAR(30) PRIMARY KEY NOT NULL,
username VARCHAR(100) NOT NULL,
rentable_book_number INT NOT NULL DEFAULT 5,
current_rental_book_number INT NOT NULL DEFAULT 0,
total_rental_book INT NOT NULL DEFAULT 0,
FOREIGN KEY (userid) REFERENCES member (userid) ON DELETE CASCADE
);

회원도서정보 테이블은 위와 같이 설정했다. 회원 테이블의 userid를 기본키로 사용했다. 컬럼을 설명하면 아이디와 이름, 대출가능한 권 수, 현재 대출 권 수, 총 대출 권 수 컬럼을 지정했다.

트랜잭션

addJoinMember() {
    var memberSql =
      "INSERT INTO member (userid, userpassword, username, phone, email) VALUES (?, ?, ?, ?, ?)";

    var memberBookInfSql =
      "INSERT INTO member_book_inf (userid, username) VALUES (?, ?)";

    var param = [
      this.userid,
      this.userpassword,
      this.username,
      this.phone,
      this.email,
    ];
    var param2 = [this.userid, this.username];
    connection.beginTransaction((err) => {
      if (err) {
        console.log("트랜잭션 에러 :" + err);
      } else {
        connection.query(memberSql, param, (err, row, fields) => {
          if (err) {
            console.log("쿼리 1 에러 : " + err);
            connection.rollback();
          } else {
            connection.query(memberBookInfSql, param2, (err, row, fields) => {
              if (err) {
                console.log("쿼리 2 에러 : " + err);
                connection.rollback();
              } else {
                connection.commit();
                console.log("Success Join!!");
                connection.end();
              }
            });
          }
        });
      }
    });
  }

기존의 회원가입 코드를 트랜잭션을 해야 해서 위와 같이 수정했다. beginTransaction이라는 함수로 트랜잭션을 시작했다. SQL코드와 query를 두 번 사용하여 오류가 생길 시에는 바로 rollback함수로 되돌려주고 최종적으로는 commit을 했다.

결과

member 테이블

member_book_inf 테이블

각각의 테이블에 데이터가 들어간 것을 확인할 수 있다.

정리하기

트랜잭션을 처음으로 사용해보았다. 데이터가 동시에 저장되어야 하기 때문에 매우매우 중요한 작업이다. 한 번 해보면서 아직은 부족한 점이 있지만, 마지막에 됐을 때는 잘 정리한 상태로 만들고 싶다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

0개의 댓글