14.6.3 트랜잭션을 사용하여 DML 작업 그룹화
기본적으로 MySQL 서버에 접속은 자동 위탁 모드가 활성화되어있는 상태에서 시작되므로 SQL 문을 실행할 때마다 자동으로 커밋됩니다. 일련의 DML 문을 실행하고 모든 한꺼번에 커밋 또는 롤백 할 표준 조작이다 다른 데이터베이스 시스템을 사용한 경험이있는 경우이 작업 모드에 익숙하지 않은지도 모릅니다.
다중 문 트랜잭션 을 사용하려면 SQL 문 SET autocommit = 0
을 사용하여 자동 커밋을 해제하고 필요한 경우 COMMIT
또는 ROLLBACK
을 사용하여 각 트랜잭션을 종료합니다. 자동 커밋을 켠 상태로하려면 START TRANSACTION
을 사용하여 각 트랜잭션을 시작하고 COMMIT
또는 ROLLBACK
을 사용하여 종료합니다. 다음 예제는 두 개의 트랜잭션을 나타냅니다. 1 번째는 커밋 된 두 번째는 롤백되고 있습니다.
shell>mysql test
mysql>CREATE TABLE customer (a INT, b CHAR (20), INDEX (a));
Query OK, 0 rows affected (0.00 sec) mysql>-- Do a transaction with autocommit turned on.
mysql>START TRANSACTION;
Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO customer VALUES (10, 'Heikki');
Query OK, 1 row affected (0.00 sec) mysql>COMMIT;
Query OK, 0 rows affected (0.00 sec) mysql>-- Do another transaction with autocommit turned off.
mysql>SET autocommit=0;
Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO customer VALUES (15, 'John');
Query OK, 1 row affected (0.00 sec) mysql>INSERT INTO customer VALUES (20, 'Paul');
Query OK, 1 row affected (0.00 sec) mysql>DELETE FROM customer WHERE b = 'Heikki';
Query OK, 1 row affected (0.00 sec) mysql>-- Now we undo those last 2 inserts and the delete.
mysql>ROLLBACK;
Query OK, 0 rows affected (0.00 sec) mysql>SELECT * FROM customer;
+------+--------+ | a | b | +------+--------+ | 10 | Heikki | +------+--------+ 1 row in set (0.00 sec) mysql>
클라이언트 측 언어에서의 트랜잭션
PHP, Perl DBI, JDBC, ODBC 등의 API 또는 MySQL의 표준 C 호출 인터페이스는 COMMIT
등의 트랜잭션 제어 문을 SELECT
및 INSERT
등의 기타 SQL 문처럼 문자열로 MySQL 서버에 보낼 수 있습니다. 일부 API를 사용하면 별도의 특별 트랜잭션 커밋 및 롤백 함수 나 메소드도 제공되고 있습니다.