기사 디렉토리
MySQL 데이터베이스트랜잭션 롤백 격리/개방형 개념/레벨 처리 php 문
MySQL의 사무
MySQL 트랜잭션은 주로 작업량이 많고 복잡도가 높은 데이터를 처리하는 데 사용됩니다.예를 들어 인사시스템에서 사람을 삭제하면 그 사람의 기본정보와 우편함, 기사 등 그 사람과 관련된 정보를 모두 삭제해야 한다. 이렇게 하여 이러한 데이터베이스 운용문 거래를 구성하십시오!
- 트랜잭션은 Innodb 데이터베이스 엔진을 사용하는 데이터베이스 또는 테이블에 대해서만 MySQL에서 지원됩니다.
- 트랜잭션 처리를 사용하여 데이터베이스의 무결성을 유지하여 SQL 문의 일괄 처리가 모두 실행되거나 실행되지 않도록 할 수 있습니다.
- 트랜잭션은 삽입, 업데이트, 삭제 문을 관리하는 데 사용됩니다.
일반적으로 트랜잭션은 4가지 조건(ACID)을 충족해야 합니다: 원자성(원자성), 일관성(안정성), 격리(격리), 내구성(신뢰성)
- 1,거래의 원자성:성공 또는 철회된 트랜잭션 집합입니다.
- 2,안정:불법 데이터(외래 키 제약 조건 등)가 있고 트랜잭션이 철회됩니다.
- 3,격리:트랜잭션은 독립적으로 실행됩니다.거래 결과가 다른 거래에 영향을 미치는 경우 다른 거래는 철회됩니다.속도를 희생해야 하는 트랜잭션의 100% 격리.
- 4,신뢰할 수 있음:소프트웨어 및 하드웨어 충돌 후 InnoDB 데이터 테이블 드라이버는 로그 파일을 사용하여 재구성 및 수정합니다.신뢰성과 고속은 둘 다 가질 수 없으며, innodb_flush_log_at_trx_commit 옵션은 트랜잭션을 로그에 저장할 시기를 결정합니다.
MySQL 명령줄의 기본 설정에서 트랜잭션은 자동으로 커밋됩니다. 즉, COMMIT 작업은 SQL 문이 실행된 직후에 실행됩니다.따라서 트랜잭션을 명시적으로 열려면 BEGIN 또는 START TRANSACTION 명령을 사용하거나 SET AUTOCOMMIT=0 명령을 실행하여 현재 세션에 대한 자동 커밋 사용을 비활성화해야 합니다.
트랜잭션 제어 문:
- BEGIN 또는 START TRANSACTION, 명시적으로 트랜잭션 시작,
- COMMIT; COMMIT WORK도 사용할 수 있지만 둘은 동일합니다. COMMIT는 트랜잭션을 커밋하고 데이터베이스에 대한 모든 수정 사항을 영구적으로 만듭니다.
- ROLLBACK; ROLLBACK WORK를 사용할 수 있지만 둘은 동일합니다.롤백은 사용자의 트랜잭션을 종료하고 진행 중인 커밋되지 않은 수정을 취소합니다.
- SAVEPOINT 식별자, SAVEPOINT를 사용하면 트랜잭션에 저장점을 만들 수 있으며 트랜잭션에는 여러 SAVEPOINT가 있을 수 있습니다.
- RELEASE SAVEPOINT 식별자, 트랜잭션의 저장점 삭제, 저장점이 지정되지 않은 경우 명령문을 실행하면 예외가 발생합니다.
- ROLLBACK TO 식별자, 트랜잭션을 해당 지점으로 롤백합니다.
- SET TRANSACTION, 트랜잭션의 격리 수준을 설정하는 데 사용됩니다. InnoDB 스토리지 엔진은 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ 및 SERIALIZABLE의 트랜잭션 격리 수준을 제공합니다.
MYSQL 트랜잭션 처리에는 두 가지 주요 방법이 있습니다.
1. BEGIN, ROLLBACK, COMMIT를 사용하여 달성
- BEGIN 거래를 시작하다
- 롤백 트랜잭션 롤백
- COMMIT 거래 확인
2. SET를 직접 사용하여 MySQL의 자동 커밋 모드를 변경합니다.
- 자동 커밋=0 설정 자동 커밋 비활성화
- 자동 커밋=1 설정 자동 커밋 켜기
거래 테스트
mysql> use chenweiliang; Database changed mysql> CREATE TABLE chenweiliang_transaction_test( id int(5)) engine=innodb; # 创建数据表 Query OK, 0 rows affected (0.04 sec) mysql> select * from chenweiliang_transaction_test; Empty set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test value(5); Query OK, 1 rows affected (0.01 sec) mysql> insert into chenweiliang_transaction_test value(6); Query OK, 1 rows affected (0.00 sec) mysql> commit; # 提交事务 Query OK, 0 rows affected (0.01 sec) mysql> select * from chenweiliang_transaction_test; +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test values(7); Query OK, 1 rows affected (0.00 sec) mysql> rollback; # 回滚 Query OK, 0 rows affected (0.00 sec) mysql> select * from chenweiliang_transaction_test; # 因为回滚所以数据没有插入 +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql>
PHP에서 트랜잭션 인스턴스 사용
MySQL ORDER BY 테스트:
<? php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn, "set names utf8"); mysqli_select_db( $conn, 'chenweiliang' ); mysqli_query($conn, "SET AUTOCOMMIT=0"); // 设置为不自动提交,因为MYSQL默认立即执行 mysqli_begin_transaction($conn); // 开始事务定义 if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(8)")) { mysqli_query($conn, "ROLLBACK"); // 判断当执行失败时回滚 } if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(9)")) { mysqli_query($conn, "ROLLBACK"); // 判断执行失败时回滚 } mysqli_commit($conn); //执行事务 mysqli_close($conn); ?>
희망 첸 웨이량 블로그( https://www.chenweiliang.com/ ) "MySQL Database Transaction Rollback Isolation/Open Concept/Level Processing of PHP Statements"를 공유하여 도움이 되었습니다.
이 기사의 링크를 공유하는 것을 환영합니다:https://www.chenweiliang.com/cwl-494.html
최신 업데이트를 받으려면 Chen Weiliang 블로그의 Telegram 채널에 오신 것을 환영합니다!
📚 이 가이드에는 엄청난 가치가 담겨 있습니다. 🌟이것은 흔치 않은 기회입니다. 놓치지 마세요! ⏰⌛💨
당신이 원한다면 공유하고 좋아하십시오!
당신의 공유와 좋아요는 우리의 지속적인 동기 부여입니다!