부분적으로 트랜잭션을 커밋하는 방법이 있는지 알고 싶습니다. 나는 C#에서 오랫동안 실행중인 트랜잭션을 가지고 있는데, 두 명의 사용자가이 트랜잭션을 서로 평행하게 실행하면 데이터는 상호 의존적이며 트랜잭션 중에도 항상 표시되어야합니다. 예를 들어,이 3 개의 열이있는 표가 있다고 가정하십시오.MySQL 트랜잭션을 부분적으로 커밋 하시겠습니까?
사용자 이름 | left_child | right_child
저는 이진 트리를 만들고 있습니다. 그리고 새로운 사용자가 데이터베이스에 추가 될 때마다 트리 어딘가에서 끝납니다. 하지만 하나의 트랜잭션에서 모든 삽입 및 업데이트를 실행하므로 하나의 오류가 있어도 전체 트랜잭션을 롤백 할 수 있고 트리 구조가 방해받지 않습니다. 하지만 문제는 두 명의 사용자가 동시에 내 웹 앱을 사용하는 경우입니다. 사용자 이름 'jackie_'에 분당 아이들이 없다고합시다. 두 명의 새로운 사용자 'king_'과 'robbo'가 서로 병렬로 입력되고 두 사람 모두에 대해 트랜잭션이 실행 중입니다. 한 사용자에 대해 실행중인 트랜잭션 결과가 아직 실제 데이터베이스의 다른 사용자에게 표시되지 않기 때문에 'jackie_'의 left_child가 아직 설정되지 않았다고 생각하므로 둘 다 left_child를 자신의 사용자 이름으로 업데이트합니다 . 업데이트가 두 제품 모두에 성공적 이었기 때문에 트랜잭션이 진행되는 동안 둘 다 트랜잭션을 커밋합니다. 이제 두 명의 사용자가 있지만 그 중 하나만 실제로 실제로 트리에 입력되고 트리의 구조가 완전히 방해받습니다.
그래서 내가 필요로하는 것은 "부분적으로"도 트랜잭션 하나를 저지 할 수 있다는 것입니다. 따라서 'robbo'가 'jackie_'의 left_child를 먼저 설정하면 트랜잭션은 데이터베이스에 변경 사항을 구현하므로 'king_'이 동일한 행을 업데이트하려고 할 때 그는 변경할 수 없습니다. 그러나 길을 따라 가면서 'robbo'에 대해 다른 문제가 발생하면 전체 트랜잭션을 롤백 할 수 있기를 원합니다. 더 실용적 일 수있는 다른 솔루션도 좋습니다. 내가 실행하고 모든 쿼리에 대한
이 내가 트랜잭션에 그 일을하고있는 방법입니다 sqlTrans
그들에게
MySqlCommand
개체를 사용하고 거래를하다
string insertTreesQuery = "INSERT INTO tree (username) VALUES('king_')";
MySqlCommand insertTreesQueryCmd = new MySqlCommand(insertTreesQuery , con);
insertTreesQueryCmd.Transaction = sqlTrans;
insertTreesQueryCmd.ExecuteNonQuery();
아니요.이 작업을 수행 할 수 없습니다. 이 문제를 해결하려면 다른 방법을 찾아야합니다. –