롤백을 허용하기 위해 PhpMyAdmin 데이터베이스 엔진을 MyISAM에서 INNODB로 업데이트했습니다.
이것은 내 SQL 쿼리입니다.
START TRANSACTION;
UPDATE jkm_content SET state=0 WHERE title IN ('title-1','title2');
결과 :
start transaction;# MySQL returned an empty result set (i.e. zero
rows).
UPDATE jkm_content SET state=1 WHERE title IN ('title-1','title2');# 2 rows affected.
1) 따라서 2 개의 행이 영향을 받았지만 변경 사항이 내 DB 나 웹 사이트에 나타나지 않는다고 설명하는 내용입니다. start transaction
을 사용하면 변경 사항을 시각화 할 수 있습니다 임시 DB에서) 그런 다음 만족하면 쿼리를 "커밋"합니다. (DB 업데이트를 위해 커밋
이 필요하다는 것을 알고 있지만 커밋
하면 변경 사항이 영구적입니다.)
2) 커밋하기 전에 효과를 볼 수 없다면 rollback
의 요점을 얻지 못합니다. 이 두 쿼리의 차이점은 무엇입니까?
START TRANSACTION;
UPDATE jkm_content SET state=0 WHERE title IN ('title-1','title2');
과
START TRANSACTION;
UPDATE jkm_content SET state=0 WHERE title IN ('title-1','title2');
ROLLBACK;
3) 내가 옳다면이 기능은 모두 동일합니다.
START TRANSACTION
BEGIN
BEGIN WORK
해결 방법
1) 모든 변경 사항은 동일한 트랜잭션 내에서 볼 수 있습니다. 만약 당신이
START TRANSACTION;
INSERT INTO MyTable VALUES ('Hi there');
SELECT * FROM MyTable;
출력에는 '안녕하세요'가 포함됩니다. 그러나 두 번째 데이터베이스 연결을 시작하면 첫 번째 연결 내에서 트랜잭션을 커밋 할 때까지 새 행이 표시되지 않습니다. 명령 줄을 사용하여 두 개의 데이터베이스 연결을 사용하여이를 사용해보십시오.
두 개의 데이터베이스 연결 내에서 동일한 트랜잭션을 가질 수 없기 때문에 웹 사이트에서 효과를 볼 수 없습니다 (요청 시작시 새로운 db 연결이 만들어집니다).
2) 커밋되지 않은 모든 트랜잭션은 데이터베이스와의 연결이 닫히면 롤백됩니다. 따라서 이것이 두 가지 쿼리뿐이라면 차이가 없습니다. 그러나 다음과 같은 차이점이 있습니다.
START TRANSACTION;
INSERT INTO MyTable VALUES ('This one would be discarded on rollback');
ROLLBACK;
INSERT INTO MyTable VALUES ('This one will be permanent because not within transaction');
3) 예, 모두 동일합니다.
참조 페이지 https://stackoverflow.com/questions/19890966
'MySql' 카테고리의 다른 글
MySQL MySql에서 트리거를 만드는 동안 변수 선언 (0) | 2020.12.18 |
---|---|
MySQL mysql 쿼리의 정의되지 않은 인덱스 오류 (0) | 2020.12.18 |
MySQL 두 번째 클릭시 라디오 버튼 선택 취소 (0) | 2020.12.18 |
MySQL 준비된 문이있는 PDO bindParam ()이 작동하지 않습니다. (0) | 2020.12.18 |
MySQL 다중 왼쪽 조인 (0) | 2020.12.18 |
댓글