찾다
데이터 베이스MySQL 튜토리얼MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    1. 트랜잭션 격리 메커니즘 선택

    • 전혀 신경 쓰지 않고 uncommitted read 트랜잭션 격리 메커니즘을 사용하고 이러한 스레드가 데이터베이스를 동시에 작동하도록 허용하면 더티 읽기(Uncommitted 읽기) 데이터), 비반복 읽기(두 개의 쿼리 값이 다름), 팬텀 읽기(두 개의 쿼리 데이터 볼륨이 다름) 등의 문제, 데이터 보안이 가장 낮고 장점은 동시성 효율성이 매우 높다는 것입니다. 일반적으로 사용되지 않습니다

    • 우리가 직렬화(잠금으로 구현)하고 모든 트랜잭션을 잠금을 통해 주문하면 데이터 보안이 향상되지만 동시성 효율성이 너무 낮아 일반적으로 사용되지 않습니다

    • 그래서 우리는 일반적으로 데이터의 보안, 일관성, 동시성 효율성의 균형을 맞추는 Committed Read와 Repeatable Read의 두 가지 격리 수준을 사용하며, 이는 MVCC 다중 버전 동시성 제어(MVCC)로 구현되는 Committed Read 및 Repeatable Read의 원칙입니다. 반복 읽기, 잠금은 직렬화 원칙)

    2. 테이블 수준 잠금 & 행 수준 잠금

    테이블 수준 잠금: 테이블 전체를 잠급니다. 오버헤드가 적고(테이블에서 특정 행의 레코드를 찾아 잠글 필요가 없기 때문이다. 이 테이블을 수정하고 싶다면 이 테이블의 잠금을 직접 신청하면 된다) 잠금이 빠르며, 교착 상태가 발생하지 않으며 잠금 세분성이 크고 잠금 충돌이 발생합니다. 확률은 높고 동시성은 낮습니다.

    행 수준 잠금: 레코드 행을 잠급니다. 비용이 많이 들고(테이블에서 해당 레코드를 찾아야 하며 테이블과 인덱스를 검색하는 프로세스가 있음) 잠금이 느리고 교착 상태가 발생하며 잠금 세분성이 가장 낮고 잠금 충돌 가능성이 높습니다. 가장 낮고 동시성이 높습니다

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    InnoDB 스토리지 엔진은 트랜잭션 처리를 지원하고 테이블은 행 수준 잠금을 지원하며 동시성 기능이 더 좋습니다

    1. InnoDB 행 잠금은 인덱스 항목을 잠그면 달성됩니다. 즉, InnoDB는 인덱스 조건을 통해 데이터를 검색할 때만 행 수준 잠금을 사용합니다. 그렇지 않으면 InnoDB는 테이블 잠금을 사용합니다

    2. InnoDB의 행 잠금 구현은 다음과 같습니다. 행 레코드에 대한 잠금이 아닌 인덱스 필드에 잠금이 추가됩니다. 따라서 InnoDB 엔진에서 테이블의 다른 행에 액세스하더라도 동일한 인덱스 필드를 필터 조건으로 사용하면 잠금 충돌이 계속 발생합니다. 동시에는 안되고 순차적으로만 가능합니다

    3. SQL에서 인덱스를 사용하더라도, 그러나 MySQL의 옵티마이저 이후에는

      인덱스를 사용하는 것보다 전체 테이블 스캔이 더 효율적이라고 판단되면 포기하게 됩니다. 이때 인덱스를 사용하므로
      행 잠금을 사용하지 않고 테이블 잠금을 사용합니다. 예를 들어 일부 작은 테이블의 경우 MySQL은 인덱스를 사용하지 않습니다

    3. 배타적 잠금(Exclusive) 및 공유 잠금(공유)

    • X 잠금이라고도 하는 독점 잠금, 쓰기 잠금

    • S 잠금이라고도 하는 공유 잠금, 읽기 잠금

    읽기 및 읽기(SS)는 호환되지만 읽기 및 읽기 잠금 쓰기(SX, SX)와 쓰기 및 쓰기(XX)는 상호 배타적입니다

    쌍 X 및 S 잠금을 추가하는 트랜잭션 간에는 다음과 같은 관계가 있습니다.

    • A 트랜잭션은 데이터 개체 A에 S 잠금을 추가합니다. 읽기를 수행할 수 있습니다. A에 대한 작업은 수행할 수 있지만 잠금 기간 동안 다른 트랜잭션은 A에 S 잠금을 추가할 수 있습니다. S 잠금은 추가할 수 없지만 X 잠금은 추가할 수 없습니다

    • A 트랜잭션은 공유 잠금을 강제하기 위해 공유 모드에서 :select … 획득, 독점 잠금 획득을 위한 업데이트를 위해 … 선택

    먼저 트랜잭션을 열고 ID=7인 데이터에 독점 잠금을 추가합니다.

    그런 다음 다른 클라이언트를 사용하여 트랜잭션을 엽니다.

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    우리는 다른 트랜잭션의 서비스 스레드에 독점 잠금을 추가했습니다. id=7인 데이터에 차단되었습니다

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    id=7인 데이터에 공유 잠금을 추가하려고 했지만 여전히 차단되었습니다

    요약: 서로 다른 트랜잭션 간 데이터 잠금의 경우 SS 잠금만 가능합니다. XX, SX, 그리고

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    테이블의 인덱싱되지 않은 필드를 필터링 조건으로 사용

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    이제 트랜잭션 2도 이 레코드의 독점 잠금을 얻으려고 하지만 상상할 수 있듯이 실패하고 이제 트랜잭션 2가 획득합니다. chenwei의 기록 독점 잠금, 성공할 수 있는지 확인해보세요

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    InnoDB는 행 잠금을 지원합니다. 방금 기본 키 ID가 필터 조건으로 사용되었을 때 트랜잭션 1과 트랜잭션 2는 서로 다른 행에 대한 잠금을 성공적으로 획득할 수 있습니다. 그러나 이제 우리는 chenwei라는 독점 잠금 장치를 얻을 수 없다는 것을 알게 되었습니다. 설명하자면:

    InnoDB의 행 잠금은 테이블의 행 레코드를 잠그는 것이 아니라 인덱스 항목을 잠그는 방식으로 구현됩니다.

    그리고 인덱스를 사용하지 않고 이름을 필터 조건으로 사용하므로 당연히 행 잠금은 사용되지 않지만 테이블 자물쇠가 사용됩니다. 즉, InnoDB는 인덱스를 통해 데이터를 검색할 때 행 수준 잠금만 사용합니다. 그렇지 않으면 InnoDB는 테이블 잠금을 사용합니다!!!

    이름 필드에 인덱스를 추가합니다

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    다음에 인덱스를 추가하는 것을 발견했습니다. 이름 필드 인덱스를 추가한 후 두 트랜잭션은 서로 다른 행에 대해 배타적 잠금(업데이트용)을 얻을 수 있습니다. 이는 이제 이름이 인덱스에 있으므로 InnoDB의 행 잠금이 인덱스 항목에 추가되었음을 다시 한 번 증명합니다

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    , zhangsan을 통해 보조 인덱스 트리에 위치한 행 레코드의 ID가 7이라는 것을 발견한 후 기본 키 인덱스 트리로 이동하여 해당 행 레코드의 배타적 잠금을 얻었습니다 (내 개인적인 추측은 해당 보조 인덱스 트리와 기본 키 인덱스 트리의 레코드가 추가되었습니다. Lock)

    4. 직렬화 격리 수준 테스트

    (모든 트랜잭션은 배타적 잠금 또는 공유 잠금을 사용하므로 사용자가 수동으로 잠금을 추가할 필요가 없습니다)

    설정 직렬화 격리 수준

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    트랜잭션 2개 공유 잠금을 동시에 획득 가능(SS 공존)

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    이제 트랜잭션 2에 데이터를 삽입하도록 합니다

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    이때 독점 잠금을 설정해야 합니다. 삽입으로 인해 추가되었지만 트랜잭션 1이 이미 전체 테이블에 공유 잠금을 추가했기 때문에 트랜잭션 2는 더 이상 테이블을 성공적으로 잠글 수 없습니다(SX는 공존하지 않습니다)

    rollback

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    name에 인덱스를 추가했기 때문입니다. , 위의 선택은 zhangsan

    이라는 데이터에 행 공유 잠금을 추가하는 것과 같습니다.

    트랜잭션 2 업데이트

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    트랜잭션 2는 트랜잭션 1의 공유 잠금으로 전체 테이블이 잠겨 있기 때문에 업데이트할 수 없습니다

    트랜잭션 2는 다음과 같습니다. 보조 색인 트리에서 zhangsan에 대해 해당 기본 키 값을 찾은 다음 진행합니다. 기본 키 색인 트리에서 해당 레코드를 찾았지만 이 레코드 행이 공유 잠금에 의해 잠겨 있음을 발견했습니다. 트랜잭션 2는 공유 잠금을 얻을 수 있습니다. , 그러나 배타적 잠금을 얻을 수 없습니다

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법

    기본 키 인덱스 ID를 사용하여 업데이트할 수 있는지 확인해 보겠습니다. 또한 보조 인덱스 트리를 통해 해당 기본 키를 찾은 후 기본 키 인덱스 트리에서 해당 레코드를 찾습니다.

    그리고 기본 키 인덱스 트리의 레코드는 잠겨 있습니다

    (개인적인 추측은 보조 인덱스에 해당하는 데이터가 트리와 기본 키 인덱스 트리가 잠겨 있습니다)

    MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법id=8로 데이터를 업데이트했는데 성공했습니다. ID가 7인 행 데이터에는 행 잠금만 추가되므로 ID가 8인 데이터를 성공적으로 조작할 수 있습니다

    인덱스가 있으면 행 잠금을 사용하고, 인덱스가 없으면 테이블 잠금을 사용합니다.

    테이블 수준 잠금 또는 행 수준 잠금은 잠금의 세분성을 나타냅니다. 공유 잠금과 배타적 잠금은 잠금의 특성을 나타냅니다. 테이블 잠금인지 행 잠금인지에 따라 공유 잠금과 배타적 잠금이 구분됩니다. 독점 자물쇠

    위 내용은 MySQL 테이블 잠금, 행 잠금, 배타적 잠금 및 공유 잠금을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명
    이 기사는 亿速云에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
    Composite Index와 여러 단일 열 인덱스를 언제 사용해야합니까?Composite Index와 여러 단일 열 인덱스를 언제 사용해야합니까?Apr 11, 2025 am 12:06 AM

    데이터베이스 최적화에서 쿼리 요구 사항에 따라 인덱싱 전략을 선택해야합니다. 1. 쿼리에 여러 열이 포함되고 조건 순서가 수정되면 복합 인덱스를 사용하십시오. 2. 쿼리에 여러 열이 포함되어 있지만 조건 순서가 고정되지 않은 경우 여러 단일 열 인덱스를 사용하십시오. 복합 인덱스는 다중 열 쿼리를 최적화하는 데 적합한 반면 단일 열 인덱스는 단일 열 쿼리에 적합합니다.

    MySQL에서 느린 쿼리를 식별하고 최적화하는 방법은 무엇입니까? (느린 쿼리 로그, Performance_schema)MySQL에서 느린 쿼리를 식별하고 최적화하는 방법은 무엇입니까? (느린 쿼리 로그, Performance_schema)Apr 10, 2025 am 09:36 AM

    MySQL 느린 쿼리를 최적화하려면 SlowQueryLog 및 Performance_Schema를 사용해야합니다. 1. SlowQueryLog 및 Set Stresholds를 사용하여 느린 쿼리를 기록합니다. 2. Performance_schema를 사용하여 쿼리 실행 세부 정보를 분석하고 성능 병목 현상을 찾고 최적화하십시오.

    MySQL 및 SQL : 개발자를위한 필수 기술MySQL 및 SQL : 개발자를위한 필수 기술Apr 10, 2025 am 09:30 AM

    MySQL 및 SQL은 개발자에게 필수적인 기술입니다. 1.MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템이며 SQL은 데이터베이스를 관리하고 작동하는 데 사용되는 표준 언어입니다. 2.MYSQL은 효율적인 데이터 저장 및 검색 기능을 통해 여러 스토리지 엔진을 지원하며 SQL은 간단한 문을 통해 복잡한 데이터 작업을 완료합니다. 3. 사용의 예에는 기본 쿼리 및 조건 별 필터링 및 정렬과 같은 고급 쿼리가 포함됩니다. 4. 일반적인 오류에는 구문 오류 및 성능 문제가 포함되며 SQL 문을 확인하고 설명 명령을 사용하여 최적화 할 수 있습니다. 5. 성능 최적화 기술에는 인덱스 사용, 전체 테이블 스캔 피하기, 조인 작업 최적화 및 코드 가독성 향상이 포함됩니다.

    MySQL 비동기 마스터 슬레이브 복제 프로세스를 설명하십시오.MySQL 비동기 마스터 슬레이브 복제 프로세스를 설명하십시오.Apr 10, 2025 am 09:30 AM

    MySQL 비동기 마스터 슬레이브 복제는 Binlog를 통한 데이터 동기화를 가능하게하여 읽기 성능 및 고 가용성을 향상시킵니다. 1) 마스터 서버 레코드는 Binlog로 변경됩니다. 2) 슬레이브 서버는 I/O 스레드를 통해 Binlog를 읽습니다. 3) 서버 SQL 스레드는 데이터를 동기화하기 위해 Binlog를 적용합니다.

    MySQL : 쉽게 학습하기위한 간단한 개념MySQL : 쉽게 학습하기위한 간단한 개념Apr 10, 2025 am 09:29 AM

    MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) 데이터베이스 및 테이블 작성 : CreateAbase 및 CreateTable 명령을 사용하십시오. 2) 기본 작업 : 삽입, 업데이트, 삭제 및 선택. 3) 고급 운영 : 가입, 하위 쿼리 및 거래 처리. 4) 디버깅 기술 : 확인, 데이터 유형 및 권한을 확인하십시오. 5) 최적화 제안 : 인덱스 사용, 선택을 피하고 거래를 사용하십시오.

    MySQL : 데이터베이스에 대한 사용자 친화적 인 소개MySQL : 데이터베이스에 대한 사용자 친화적 인 소개Apr 10, 2025 am 09:27 AM

    MySQL의 설치 및 기본 작업에는 다음이 포함됩니다. 1. MySQL 다운로드 및 설치, 루트 사용자 비밀번호를 설정하십시오. 2. SQL 명령을 사용하여 CreateAbase 및 CreateTable과 같은 데이터베이스 및 테이블을 만듭니다. 3. CRUD 작업을 실행하고 삽입, 선택, 업데이트, 명령을 삭제합니다. 4. 성능을 최적화하고 복잡한 논리를 구현하기 위해 인덱스 및 저장 절차를 생성합니다. 이 단계를 사용하면 MySQL 데이터베이스를 처음부터 구축하고 관리 할 수 ​​있습니다.

    InnoDB 버퍼 풀은 어떻게 작동하며 성능에 중요한 이유는 무엇입니까?InnoDB 버퍼 풀은 어떻게 작동하며 성능에 중요한 이유는 무엇입니까?Apr 09, 2025 am 12:12 AM

    innodbbufferpool은 데이터와 색인 페이지를 메모리에로드하여 MySQL 데이터베이스의 성능을 향상시킵니다. 1) 데이터 페이지가 버퍼 풀에로드되어 디스크 I/O를 줄입니다. 2) 더러운 페이지는 정기적으로 디스크로 표시되고 새로 고침됩니다. 3) LRU 알고리즘 관리 데이터 페이지 제거. 4) 읽기 메커니즘은 가능한 데이터 페이지를 미리로드합니다.

    MySQL : 초보자를위한 데이터 관리의 용이성MySQL : 초보자를위한 데이터 관리의 용이성Apr 09, 2025 am 12:07 AM

    MySQL은 설치가 간단하고 강력하며 데이터를 쉽게 관리하기 쉽기 때문에 초보자에게 적합합니다. 1. 다양한 운영 체제에 적합한 간단한 설치 및 구성. 2. 데이터베이스 및 테이블 작성, 삽입, 쿼리, 업데이트 및 삭제와 같은 기본 작업을 지원합니다. 3. 조인 작업 및 하위 쿼리와 같은 고급 기능을 제공합니다. 4. 인덱싱, 쿼리 최적화 및 테이블 파티셔닝을 통해 성능을 향상시킬 수 있습니다. 5. 데이터 보안 및 일관성을 보장하기위한 지원 백업, 복구 및 보안 조치.

    See all articles

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    인기 기사

    R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 최고의 그래픽 설정
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
    3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

    뜨거운 도구

    mPDF

    mPDF

    mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

    SublimeText3 Linux 새 버전

    SublimeText3 Linux 새 버전

    SublimeText3 Linux 최신 버전

    Dreamweaver Mac版

    Dreamweaver Mac版

    시각적 웹 개발 도구

    SublimeText3 영어 버전

    SublimeText3 영어 버전

    권장 사항: Win 버전, 코드 프롬프트 지원!

    DVWA

    DVWA

    DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는