>백엔드 개발 >PHP 튜토리얼 >PHP 작업 MySQL 트랜잭션 인스턴스_php 기술

PHP 작업 MySQL 트랜잭션 인스턴스_php 기술

WBOY
WBOY원래의
2016-05-16 20:33:001476검색

이 문서의 예는 PHP가 MySQL 트랜잭션을 작동하는 방법을 설명하며 참고용으로 공유됩니다. 구체적인 방법은 다음과 같습니다.

일반적으로 거래에는 ACID 특성이 있어야 합니다. 일명 ACID는 Atomic(원자성), Consistency(일관성), Isolated(격리), Durable(지속성) 네 단어의 첫 글자를 따서 작성되었습니다. 그 의미를 설명하기 위해 "은행 송금"을 예로 들어 보겠습니다. :

① 원자성: 트랜잭션을 구성하는 문은 논리적 단위를 형성하며 그 중 일부만 실행될 수 없습니다. 즉, 거래는 분할할 수 없는 가장 작은 단위입니다. 예: 은행 송금 과정에서 한 계좌에서 이체 금액을 차감하고 동시에 다른 계좌에 추가해야 합니다. 하나의 계좌만 변경하는 것은 불합리합니다.
② 일관성(Consistency): 트랜잭션 처리 전, 후의 데이터베이스가 일관성을 갖는다. 즉, 트랜잭션은 시스템 상태를 올바르게 변환해야 합니다. 예: 은행 이체 프로세스 중에 이체 금액이 한 계좌에서 다른 계좌로 이체되거나 두 계좌가 모두 변경되지 않고 그대로 유지되며 다른 상황은 없습니다.
③ 격리성(Isolation): 하나의 트랜잭션이 다른 트랜잭션에 영향을 미치지 않습니다. 즉, 어떤 트랜잭션에서도 불완전한 상태의 트랜잭션을 보는 것은 불가능합니다. 예를 들어, 은행 송금 중 이체 거래가 제출되기 전에는 다른 이체 거래가 대기 상태에만 있을 수 있습니다.
④ 연속성: 거래 처리의 효과가 영구적으로 보존될 수 있습니다. 반대로 트랜잭션은 서버, 프로세스, 통신, 미디어 오류 등을 포함한 모든 오류를 견딜 수 있어야 합니다. 예: 은행 이체 과정에서 이체 후 계좌 상태를 저장해야 합니다.

PHP에서 mysqli는 mysql 트랜잭션과 관련된 작업을 잘 캡슐화했습니다. 아래 예:

코드 복사 코드는 다음과 같습니다.
$sql1 = "update User set ScoreCount = ScoreCount 10 where ID= ' 123456'" ;
$sql2 = "업데이트 ScoreDetail 세트 FScore = 300, 여기서 ID= '123456'";
$sql3 = "ScoreDetail ID,Score) 값에 삽입 ​​('123456',60)";
$mysqli = new mysqli('localhost','root','','DB_Lib2Test');
$mysqli->autocommit(false);//작업 시작
$mysqli->query($sql1);
$mysqli->query($sql2);
if(!$mysqli->errno){
$mysqli->커밋();
에코 '알았어';
}그밖에{
echo 'err';
$mysqli->롤백();
}

여기서는 php mysql 함수 시리즈를 사용하여 트랜잭션을 수행합니다.
코드 복사 코드는 다음과 같습니다.
$sql1 = "update User set ScoreCount = ScoreCount 10 where ID= ' 123456'" ;
$sql2 = "업데이트 ScoreDetail 세트 FScore = 300, 여기서 ID= '123456'";
$sql3 = "ScoreDetail ID,Score) 값에 삽입 ​​('123456',60)";
$conn = mysql_connect('localhost','root','');
mysql_select_db('DB_Lib2Test');
mysql_query('트랜잭션 시작');
//mysql_query('SET autocommit=0');
mysql_query($sql1);
mysql_query($sql2);
if(mysql_errno ()){
Mysql_query('롤백');
echo 'err';
}그밖에{
Mysql_query('커밋');
에코 '알았어';
}
// mysql_query('SET autocommit=1');
// mysql_query($sql3);

참고:

MyISAM: 트랜잭션을 지원하지 않으며 성능 향상을 위해 읽기 전용 프로그램에 사용됩니다
InnoDB: ACID 트랜잭션, 행 수준 잠금 및 동시성을 지원합니다
Berkeley DB: 트랜잭션 지원

이 기사가 모든 사람의 PHP MySQL 데이터베이스 프로그래밍에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.