누구나 MySQL savepoints (직접 또는 ORM을 통해)을 사용하여 공유 할 수있는 경험이 있습니까? 특히 사소한 웹 서비스에서 특히 그렇습니까? 실제로 어디에서 사용 했습니까? 그것들은 충분히 안정적입니까 (여러분이 MySQL의 최신 버전을 기꺼이 사용하고 있다고 가정 할 때) 또는 너무 날카롭거나 비싸지 않습니까?웹 서비스에서 MySQL 세이브 포인트를 실제로 사용합니까?
마지막으로, 다음 유스 케이스와 같은 경험이있는 사람이 누구이며 저장 점을 사용 했습니까? 특정 작업 단위의 주된 포인트는 Orders
테이블에 행을 추가하는 것입니다 (물론 주문 관련 일 필요는 없습니다). 같은 트랜잭션으로 OrdersAuditInfo
테이블을 업데이트한다고 가정 해보십시오. 가능하면 Orders
을 업데이트해야하지만 OrdersAuditInfo
테이블은 필수적이지 않습니다 (예 : 파일에 오류를 기록하고 전체 트랜잭션을 계속 진행하는 것이 좋습니다).
BEGIN;
INSERT INTO Orders(...) VALUES (...);
/* Do stuff outside of SQL here; if there are problems, do a
ROLLBACK and report an error (i.e., Order is invalid in this
case anyway). */
SAVEPOINT InsertAudit;
INSERT INTO OrdersAudit(...) VALUES(...);
/* If the INSERT fails, log an error to a log file somewhere and do: */
ROLLBACK TO SAVEPOINT InsertAudit;
/* Always want to commit the INSERT INTO Orders: */
COMMIT;
을하지만 여기에도 아마 더 나은 (또는 적어도 일반적인) 관용구가있을 것 : 낮은 수준에서 그것과 같을 수 있습니다 (경고, 의사-SQL은 다음)? 완전히 다른 거래에서 OrdersAuditInfo
삽입을 할 수는 있지만 COMMIT
이 실제로 작동하지 않는 한 이 아니고이 아닌 테이블에 쓰여졌 음을 보장하는 것이 좋습니다.
전체 트랜잭션의 일부로 OrdersAudit을 원했던 이유는 Orders에 대한 삽입이 어떤 이유로 COMMIT 시간에 실패한 경우였습니다. –