반응형
TRANSACTION 블록 MySQL 외부에서 삽입 실행
를 실행할 수 있습니까?MySQL INSERT
외부에서 지휘하다MySQL TRANSACTION
?
데이터베이스 내의 모든 오류를 기록하기 때문에 이것이 필요합니다.MySQL
오류가 발생하면 쿼리를 롤백해야 하며 오류는 여전히 데이터베이스에 삽입되어야 합니다.
다음은 코드 예시입니다.
<?php
DB('main')->query("START TRANSACTION;");
$error = false;
for ($i=0; $i<10; $i++) {
$rand = rand(0, 10);
if ($rand < 5) {
$error = true;
DB('main')->query("INSERT INTO Errors SET ErrorText = 'There was an error'");
break;
}
DB('main')->query("INSERT INTO RandomTable SET RandomValue = '" . $rand . "'");
}
if ($error) {
DB('main')->query("ROLLBACK");
} else {
DB('main')->query("COMMIT");
}
이 코드를 사용하면 에러가 발생했을 경우,Errors
테이블은 전혀 삽입되지 않습니다.사용하지 않으면TRANSACTIONS
에러가 발생하기 전에 삽입된 행을 모두 수동으로 삭제해야 합니다.
제가 알기론, 간단히 말해서INSERT
에러에 대해서ROLLBACK
명령어입니다만, 에러가 발생할 가능성이 있는 장소는 50개입니다.각 에러는 다릅니다.
플랜 C: 로깅 오류에 대해서만 MySQL에 대한 두 번째 연결을 사용합니다.
이와 관련하여,autocommit=ON
없이.BEGIN..COMMIT
이렇게 하면 '로그' 레코드가 즉시 삽입됩니다.
스택에서 오류를 푸시하고 나중에 저장하는 것은 어떻습니까?
DB('main')->query("START TRANSACTION;");
$error = false;
$errors = [];
for ($i=0; $i<10; $i++) {
$rand = rand(0, 10);
if ($rand < 5) {
$error = true;
$errors[] = "There was an error with ".$rand;
break;
}
DB('main')->query("INSERT INTO RandomTable SET RandomValue = '" . $rand . "'");
}
if ($error) {
DB('main')->query("ROLLBACK");
DB('main')->query("INSERT INTO Errors (ErrorText) values (...)", $errors );
} else {
DB('main')->query("COMMIT");
}
언급URL : https://stackoverflow.com/questions/55141922/run-insert-outside-of-transaction-block-mysql
반응형
'sourcecode' 카테고리의 다른 글
상태: "MariaDB 서버가 다운되었습니다" (0) | 2022.11.07 |
---|---|
MYSQL의 2개의 개별 테이블에서 사용 가능한 모든 행에 대해 피벗 테이블엔트리를 작성하는 방법 (0) | 2022.11.07 |
어레이 반복에 "for...in"을 사용하는 것이 좋지 않은 이유는 무엇입니까? (0) | 2022.11.07 |
커스텀 마리아 DB 도커 이미지 작성 방법 (0) | 2022.11.07 |
Kotlin에서 익명 인터페이스 인스턴스를 작성하려면 어떻게 해야 합니까? (0) | 2022.11.07 |