2011-04-08 3 views
2

우리 시스템 엔지니어는 모든 사람에게 MySQL을 얼마나 싫어하는지, 그리고 포스트그레스를 얼마나 좋아하는지, 우리가 전환해야 하는지를 생각 나게합니다. 그의 불평은 때로는 합리적으로 보이지만, 최근에 그들은 우스운 이야기를 포함 시켰습니다. 그가 지금 주장하고있는 것 중 하나는 "InnoDB는 실제로 트랜잭션을 수행하지 않는다. 단지 으로 가장합니다." 예, 직접적인 인용입니다. 실제로, 그는 innodb의 모든 트랜잭션 관련 명령이 실제로 NOP라고 주장합니다. 여기에 그가 단지 5 분 전에 말했다 무언가의 의역이다 :. 내가 트랜잭션에 모든 것을 유지하기 때문에"InnoDB는 실제로 트랜잭션을 지원하지 않습니다."- 뭐라구?

"나는 최근에 그 발견이 나는 롤백을 갔다, 그리고 그것은 나를 후하게하지 않을 것이다. 일부 파기는 innodb의 모든 트랜잭션 명령이 실제로 NOP라는 것을 알았습니다. "

나는 현혹하게 우스운 소리가 난다. 즉, 아무도 innodb를 사용하여 트랜잭션을 롤백하지 못했거나 실제로 트랜잭션을 롤백 한 적이 없었습니다. 그것은 innodb의 개발자가 철저히 거짓말을한다는 것을 의미 할 것이고, 우리가 모두 그들의 fakery를 위해 쓰러 질 정도로 바보 같다고 생각할 것입니다.

그의 주장에 진실의 곡식이 있다는 것을 가능한 한 조금이라도 가능한 방법이 있을까요? 또는 미친 듯이 들리지 않는 방식으로이를 해석하는 몇 가지 비틀어 진 방법이있을 수 있습니까?

편집 : 분명하지 않습니다. 나는 그의 주장에 대한 증거를 찾을 수 없기 때문에 그가 잘못한 것이 든, 내가 알고 있어야만하는 진실이 있는지를 물을 것이다.

+0

나는 자주 질문에 표를 던지기 때문에 질문에 실제 질문을하는 것이 좋습니다. –

+1

질문은 마지막 단락에 있지만이 질문에는 아무런 문제가 없습니다. IMHO – SQLMenace

+0

참조 : [Transactions - InnoDB Tutorial] (http://mysqldump.azundris.com/archives/77-Transactions-An-InnoDB-Tutorial.html) –

답변

4

아니요. 이것은 잘못되었습니다. InnoDB 커밋 플러시가 잘못 설정되어 트랜잭션을 롤백 할 수 없다고 생각합니다.

기본적인 대답은 다음과 같습니다. InnoDB의 전체 지점은 트랜잭션이고 행 수준 잠금이지만 트랜잭션은 InnoDB의 필수 요소입니다.

또한 그는 AutoCommit을 끄지 않는 것처럼 어리석은 짓을 할 수 있습니다. 따라서 "트랜잭션"의 각 SQL 문이 커밋되어 자체 트랜잭션이됩니다. (where 절 실종 주)

BEGIN TRANSACTION 

다음

DELETE FROM TABLE 

처럼 멍청한 짓을 한 후, 일부 더미 데이터와 함께 InnoDB의 테이블을 만들고 다음을 수행하십시오

+0

*하지만 MySQL 성능은 여전히 ​​더 뛰어납니다. IMO *는 InnoDB가 트랜잭션을 수행하지 않는다는 것과 마찬가지로 말도 안됩니다. PostgreSQL이 빠르며 MySQL이 더 빠른 작업 부하가있는 작업 부하가 있습니다 –

+0

SQL Server, Oracle 및 NoSQL이 더 나은 방법이라는 의견을 기다릴 수 없습니다 :-) – SQLMenace

5

이 잘못을 증명할 수

ROLLBACK 

테이블의 데이터가 신비하게 다시 존재할 때, InnoDB는 트랜잭션 ons와 collegue는 오보입니다.

그는 단지 InnoDB와 MyISAM을 섞어 놓았을 수도 있습니다.

관련 문제