Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL 트랜잭션을 어떻게 구현할 수 있습니까?


트랜잭션에서 문이 하나의 단위로 실행된다는 것을 알고 있습니다. 트랜잭션 내의 작업이 실패하면 전체 트랜잭션이 실패하고 롤백해야 합니다. 그렇지 않으면 명령문에 의한 모든 변경 사항이 데이터베이스에 저장됩니다. 트랜잭션을 구현하기 위해 MySQL은 다음 명령문을 제공합니다. -

거래 시작

이름에서 알 수 있듯이 트랜잭션은 이 문으로 시작됩니다. 기본적으로 트랜잭션이 종료될 때까지 이어지는 문장을 하나의 작업 단위로 취급해야 한다고 MySQL에 알린다.

커밋

COMMIT 문은 데이터베이스에 대한 변경 사항을 커밋합니다. 즉, 트랜잭션이 성공적으로 완료되면 관련된 모든 테이블에 대한 변경 사항이 적용되도록 COMMIT 명령을 실행해야 합니다.

롤백

ROLLBACK 명령은 명령문에 의해 수행된 모든 변경 사항을 취소하고 데이터베이스를 이전 상태, 즉 트랜잭션이 시작된 상태로 되돌립니다.

예시

다음은 MySQL 트랜잭션의 구현을 보여주는 예입니다. -

mysql> START TRANSACTION;Query OK, 영향을 받는 행 0개(0.00초)mysql> INSERT INTO Marks Values(1, 'Aarav','Maths',50);Query OK, 영향을 받는 행 1개(0.00초)mysql> INSERT INTO Marks Values(2, 'Harshit','Maths',55);쿼리 OK, 1행 영향(0.00초)mysql> COMMIT;쿼리 OK, 0행 영향(0.06초)

이 예에서 트랜잭션은 START TRANSACTION 문에 의해 시작됩니다. 그런 다음 두 개의 INSERT 문이 실행되고 그 다음에 COMMIT 문이 실행됩니다. COMMIT 문은 값이 테이블에 삽입되었음을 보여주는 다음 결과 집합에서 관찰할 수 있는 데이터베이스에 대한 변경 사항을 저장합니다. -

mysql> SELECT * FROM 표시; +------+---------+---------+------+| 아이디 | 이름 | 주제 | 표시 |+------+---------+---------+------+| 1 | 아라브 | 수학 | 50 || 2 | 가혹한 | 수학 | 55 |+------+---------+---------+----+2행 세트(0.00초)mysql> START TRANSACTION;Query OK, 영향을 받는 행 0개(0.00초)mysql> INSERT INTO Marks Values(1, 'Aarav','History',40);Query OK, 영향을 받는 행 1개(0.00초)mysql> INSERT INTO Marks Values(1, 'Harshit','History',48);쿼리 OK, 1행 영향(0.00초)mysql> ROLLBACK;Query OK, 0행 영향(0.04초)

이 예에서 트랜잭션은 START TRANSACTION 문에 의해 시작됩니다. 그런 다음 두 개의 INSERT 문이 실행되고 그 다음에 ROLLBACK 문이 실행됩니다. ROLLBACK 문은 새 값이 테이블에 삽입되지 않았음을 보여주는 다음 결과 집합에서 관찰할 수 있는 데이터베이스에 대한 변경 사항을 취소합니다. -

<미리>mysql> SELECT * FROM 마크;+---------+------+---------+-------+| 아이디 | 이름 | 주제 | 표시 |+------+---------+---------+------+| 1 | 아라브 | 수학 | 50 || 1 | 가혹한 | 수학 | 55 |+------+---------+---------+----+2행 세트(0.00초)