MySQL-트랜잭션
트랜잭션은 하나의 단일 작업 단위 인 것처럼 수행되는 데이터베이스 조작 작업의 순차적 그룹입니다. 즉, 그룹 내의 각 개별 작업이 성공하지 않으면 트랜잭션이 완료되지 않습니다. 트랜잭션 내의 작업이 실패하면 전체 트랜잭션이 실패합니다.
실제로 많은 SQL 쿼리를 그룹으로 묶고 트랜잭션의 일부로 모두 함께 실행합니다.
거래의 속성
트랜잭션에는 일반적으로 약어로 참조되는 다음 네 가지 표준 속성이 있습니다. ACID −
Atomicity−이를 통해 작업 단위 내의 모든 작업이 성공적으로 완료됩니다. 그렇지 않으면 트랜잭션이 실패 지점에서 중단되고 이전 작업이 이전 상태로 롤백됩니다.
Consistency − 이것은 성공적으로 커밋 된 트랜잭션에서 데이터베이스가 상태를 적절하게 변경하도록 보장합니다.
Isolation −이를 통해 트랜잭션이 독립적으로 작동하고 서로에게 투명하게 작동 할 수 있습니다.
Durability −이를 통해 시스템 장애시 커밋 된 트랜잭션의 결과 또는 효과가 지속됩니다.
MySQL에서 트랜잭션은 다음 문으로 시작합니다. BEGIN WORK 다음 중 하나로 끝납니다. COMMIT 또는 ROLLBACK성명서. 시작과 끝 문 사이의 SQL 명령은 트랜잭션의 대부분을 구성합니다.
커밋 및 롤백
이 두 키워드 Commit 과 Rollback 주로 MySQL 트랜잭션에 사용됩니다.
성공적인 트랜잭션이 완료되면 관련된 모든 테이블에 대한 변경 사항이 적용되도록 COMMIT 명령을 발행해야합니다.
오류가 발생하면 ROLLBACK 명령을 실행하여 트랜잭션에서 참조 된 모든 테이블을 이전 상태로 되돌려 야합니다.
세션 변수를 설정하여 트랜잭션의 동작을 제어 할 수 있습니다. AUTOCOMMIT. AUTOCOMMIT가 1 (기본값)로 설정된 경우 각 SQL 문 (트랜잭션 내 여부)은 완전한 트랜잭션으로 간주되고 완료 될 때 기본적으로 커밋됩니다.
AUTOCOMMIT가 0으로 설정되면 SET AUTOCOMMIT = 0 명령을 사용하는 경우 후속 명령문은 트랜잭션처럼 작동하며 명시 적 COMMIT 명령문이 발행 될 때까지 어떠한 활동도 커밋되지 않습니다.
다음을 사용하여 PHP에서 이러한 SQL 명령을 실행할 수 있습니다. mysql_query() 함수.
거래에 대한 일반적인 예
이 이벤트 시퀀스는 사용되는 프로그래밍 언어와 무관합니다. 논리 경로는 응용 프로그램을 만드는 데 사용하는 언어로 만들 수 있습니다.
다음을 사용하여 PHP에서 이러한 SQL 명령을 실행할 수 있습니다. mysql_query() 함수.
SQL 명령을 실행하여 트랜잭션 시작 BEGIN WORK.
SELECT, INSERT, UPDATE 또는 DELETE와 같은 하나 이상의 SQL 명령을 실행하십시오.
오류가없고 모든 것이 귀하의 요구 사항에 맞는지 확인하십시오.
오류가 있으면 ROLLBACK 명령을 실행하고 그렇지 않으면 COMMIT 명령을 실행하십시오.
MySQL의 트랜잭션 안전 테이블 유형
트랜잭션을 직접 사용할 수는 없지만 특정 예외의 경우 사용할 수 있습니다. 그러나 안전하지 않으며 보장되지 않습니다. MySQL 프로그래밍에서 트랜잭션을 사용하려는 경우 특별한 방법으로 테이블을 만들어야합니다. 트랜잭션을 지원하는 많은 유형의 테이블이 있지만 가장 많이 사용되는 테이블은InnoDB.
InnoDB 테이블을 지원하려면 소스에서 MySQL을 컴파일 할 때 특정 컴파일 매개 변수가 필요합니다. MySQL 버전에 InnoDB가 지원되지 않는 경우 인터넷 서비스 공급자에게 InnoDB 테이블 유형을 지원하는 MySQL 버전을 빌드하도록 요청하거나MySQL-Max Binary Distribution Windows 또는 Linux / UNIX의 경우 개발 환경에서 테이블 유형으로 작업합니다.
MySQL 설치가 InnoDB 테이블을 지원하는 경우 간단히 TYPE = InnoDB 테이블 생성 문에 대한 정의.
예를 들어 다음 코드는 다음과 같은 InnoDB 테이블을 생성합니다. tcount_tbl −
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.05 sec)
이노에 대한 자세한 내용은 다음 링크를 클릭 할 수 있습니다 - 이노을
다음과 같은 다른 테이블 유형을 사용할 수 있습니다. GEMINI 또는 BDB하지만이 두 테이블 유형을 지원하는지 여부는 설치에 따라 다릅니다.