2014-09-26 4 views
1

나는 MySQL MyISAM을 사용하고 있으며 변경할 수 없다. 그러나 나는 트랜잭션 접근법에 대해서만 잘 알고있다. 의 MyISAM은 트랜잭션을 지원하지 않기 때문에이 같은 일에 두 업데이트 쿼리를 결합 생각 해요 :하나의 MySQL 쿼리에서 여러 업데이트가 트랜잭션 동작을 에뮬레이트 할 수 있습니까?

UPDATE table1, table2 SET table1.col1='value1', table2.col1='value2' 
WHERE table1.col3='567' AND table2.col6='876' 

는 하위 쿼리가 실패하면, 다른 하나는 다음과 같이 실행되지 않습니다이 보장합니까 그러면 쿼리는 FALSE를 반환 할 것입니까?

이것을 테스트하기 위해 유효한 필드 이름을 table1에 유효하지 않은 것으로 바꾼 다음 표 2에 대해 유효하게 대체했습니다. 두 경우 모두 phpMyAdmin이 오류를 반환했으며 쿼리가 실행되지 않았습니다.

다른 쿼리 오류가 발생해도이 동작을 관찰 할 수 있습니까?

+0

트랜잭션과 원격으로 비슷한 것을 보장하지 않습니다. 무엇을 사용하려고해도 OS의 fsync 호출을 호출하거나 강제로 fsync를 강제 실행하지 않습니다. 따라서 정의에 따르면 - 아니요, 트랜잭션 동작을 에뮬레이션하지 않습니다. 당신은 MyISAM과 거래를 할 수없고, 그것을 에뮬레이션 할 수 없으며, 그것을 짜낼 수 없습니다. 자물쇠를 시도 할 수는 있지만 그럴 수는 없지만 그럴 수는 없습니다. –

답변

1

첫 번째 오류가 발생한 후 실행되지 않는 항목에 의존 할 수 있습니다 (이러한 오류는 일반적으로 프로그래머가 아니지만 데이터베이스 수준에서 예측하기가 어렵습니다). 그 시점에서 데이터베이스에 쓰여진 것은 이 아니고이되지 않습니다 (결국, MyISAM 테이블을 지원하지 않는 테이블을 사용하고있는 것입니다).

듣고 싶은 대답이 아니지만 예측 가능하고 안정적인 트랜잭션 동작이 필요한 경우 실제로 유일한 방법은 InnoDB와 같은 엔진을 지원하는 것입니다.

+0

알았어. 나는 '잠금 테이블'접근법을 탐구해야만하는 것처럼 보입니다. –