MySQL 데이터베이스에서 두 번 변경된 내용에 대한 스냅 샷을 가져 오려고합니다. 나는 서로 다른 엔티티의 테이블을 가지고 있으며, 각 테이블은 행이 업데이트 될 때 자동으로 현재 날짜로 설정된 "Last Updated"열을 가지고 있습니다.MySQL에서 여러 개의 동시 SELECT 문
"App의 이전 동기화 시간"< = "마지막으로 업데이트 된"< "현재 시스템 (데이터베이스의 각 테이블에 대해 하나씩)을 사용하여 데이터베이스를 쿼리하는 클라이언트 응용 프로그램이 있습니다. 시각". 이것은 정상적으로 작동하고 클라이언트 응용 프로그램을 데이터베이스와 동기화 상태로 유지합니다. 그러나, 테이블 중 일부는 그들 사이의 관계를, 그리고 각 SELECT 문은 데이터베이스에서 동시에 실행되지 않습니다 걱정, 그래서 나는이 같은 끝낼 수 있습니다 그래서
Client App | Server App
SELECT * FROM Table1 |
| Update Table1 & Table2, altering relationships
SELECT * FROM Table2 |
테이블 (및 관계)은 스냅 샷을 가져 오는 중간 단계에서 수정되어 잠재적으로 잘못된 관계 정보를 반환합니다 (예 : 서버 응용 프로그램이 테이블 1 & 2에 새 행을 삽입하므로 클라이언트가 테이블 2를 쿼리 할 때 존재하지 않는 표 1의 항목).
나는 트랜잭션이나 잠금을 사용해야한다고 생각하지만, 더 좋은 방법이 있는지 확실하지 않습니다. MySQL Connector/.NET을 사용하여 C#에서 서버에 액세스합니다. 그런 다음
string commandString = "SELECT * FROM Table1; SELECT * FROM Table2;";
using (MySqlCommand command = new MySqlCommand(commandString, connection))
로 모두 읽어 : 현재, 나는, 예를 들어, 모든 SELECT 문에 하나의 MySQLCommand을 만들 내가 SELECT 문 사이에 수정되는 테이블을 방지 가겠어요 어떻게
using (MySqlDataReader reader = command.ExecuteReader())
{
do
{
if (reader.HasRows)
{
//....
}
} while (reader.NextResult());
}
?
당신이 LOCK을 시도 가지고 일을하고 – SerenityNow
http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html을 테이블 잠금을 해제하려면 트랜잭션 이노 엔진을 사용해야합니다 – SerenityNow
그래서 나는 다음과 같이 할 것입니다 : LOCK TABLES Table1 READ, Table2 READ; SELECT * FROM Table1; SELECT * FROM Table2; UNLOCK TABLES; ? 그리고 이것은 다른 연결에서 테이블에 쓰기를 막을 수 있습니까? 잠긴 상태에서 글을 쓰려고하면 어떻게됩니까? 기다릴 지 아니면 오류가 발생합니까? –