2013-04-16 1 views
2

MySQL 테이블 lock에 대해 몇 가지 질문이 있습니다.mysql이 선택, 업데이트 또는 삭제시 테이블을 잠급니까?

  • SELECT id FROM members;
  • UPDATE members SET name = 'john' WHERE id = 7;
  • 이 둘 사이의 차이는 무엇입니까 : 사람이 대답하는 경우 :

    1. 다음과 같은 경우에 자동으로 MySQL의 잠금 테이블을합니까 나는 감사 :

      • LOCK TABLE items READ ; SELECT * FROM 'items;
      • SELECT * FROM 'items';
      • 내가 MySQL이 자동으로 필요한 경우에 테이블을 고정하는 인상이었다 어떤 이유
    2. ! 잠금이 언제 어떻게 발생하는지 확인하려면 어떻게해야합니까?

    감사합니다.

  • +2

    는 어떤 스토리지 엔진 ... 따라 다릅니다? 거래 내에서? 그렇다면 어떤 격리 수준입니까? – eggyal

    +0

    http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html –

    +0

    http://stackoverflow.com/questions/917640/any-way-to-select-without-causing-locking -in-mysql? rq = 1 –

    답변

    1

    1.A)에는 잠금
    1.B)이 테이블 (의 MyISAM 엔진을 고정 할 필요가 없습니다) 또는이) 이노 엔진

    2.A를 사용하여 읽기 작업 테이블 (잠금 경우는 행 수준 잠금이 이 잠금이 해제 될 때까지 쓰기 작업은 Lithu TV는 모든 사용 사례를 얻기 위해 DOCS을 읽어 보시기 바랍니다 제안으로 어떤 잠금이

    를 필요 없음)
    2.B) 발생하지 않습니다.

    0
    1. 내가 아는 한, mysql에서 테이블은 자동으로 잠기지 않습니다. 그러나 그것은 당신이 사용하는 것에 달려 있습니다. 예를 들어 SqlTransaction을 사용하면 커밋되거나 롤백 될 때까지 영향을받는 테이블이 잠길 수 있습니다.

    2. a. 먼저 테이블을 잠그면 테이블을 읽는 동안 아무도 쓰기를 위해 잠글 수없고 교착 상태가 발생할 수 있습니다.) b. 특수한 상황에서 테이블을 잠그면 테이블을 읽을 수 없으므로 SQL이 실패합니다.

    $sql = "SHOW OPEN TABLES FROM '".$db_name."' 
    WHERE In_use > 0 
    AND 
    'Table' IN ("; 
    
    $tables = count($array_tables_names); 
    for($i = 0; $i < $tables; $i++): 
    $sql .= "'".$array_tables_names[$i]."'"; 
    if($i < ($tables-1)) $sql .= ","; 
    endfor; 
    
    $sql .= ")"; 
    
    "SHOW OPEN TABLES", 당신은 같은 STH, 그것은 약간 때문에 제외 할 시스템 테이블의 복잡 가능한 모든 테이블과 자신의 잠금 상태 을 볼 수와

  • 은 잠금 장치에

    자세한 내용은 여기에서 찾을 수 있습니다 : http://dev.mysql.com/doc/refman/5.1/en//lock-tables.html

    관련 문제