MySQL 시리즈 의 10 MySQL 사무 격 리 병행 제어 실현
6276 단어 mysql동시 제어트 랜 잭 션 격 리
실 현 된 동시 방문 제어 기술 은 자물쇠 에 기초 한 것 이다.
자 물 쇠 는 표 급 자물쇠 와 행 급 자물쇠 로 나 뉘 는데 MyISAM 저장 엔진 은 행 급 자 물 쇠 를 지원 하지 않 습 니 다.InnoDB 는 표 급 자물쇠 와 행 급 자 물 쇠 를 지원 합 니 다.
자물쇠 의 분 류 는 읽 기 자물쇠 와 쓰기 자물쇠 가 있 고 읽 기 자 물 쇠 는 공유 자물쇠 라 고도 부 르 며 자 물 쇠 를 읽 을 때 다른 사람 이 읽 을 수 있다.자 물 쇠 를 쓰 는 것 도 독점 자물쇠 나 자물쇠 라 고 하 는데,자 물 쇠 를 쓰 는 것 은 다른 읽 기와 쓰기 동작 을 막 을 수 있다.
자 물 쇠 는 암시 적 자물쇠 와 명시 적 자물쇠 로 나 뉘 는데 암시 적 자 물 쇠 는 저장 엔진 이 스스로 관리 하고 명시 적 자 물 쇠 는 사용자 가 수 동 으로 자 물 쇠 를 추가 하 는 것 이다.
잠 금 정책:잠 금 입도 및 데이터 안전성 에 대한 균형 메커니즘.
현식 자물쇠 사용 방법:LOCK TABLES tblname READ|WRITE
MariaDB [school]> LOCK TABLES students READ; #
MariaDB [school]> UNLOCK TABLES; #
읽 기 자물쇠:아무 도 쓸 수 없습니다.자물쇠 쓰기:스스로 읽 고 쓸 수 있 지만 다른 사람 은 읽 고 쓸 수 없습니다.
FLUSH TABLES tb_name:열 려 있 는 시 계 를 닫 습 니 다(검색 캐 시 지우 기).백업 전에 전역 읽 기 자 물 쇠 를 추가 합 니 다.
SELECT clause[FOR UPDATE|LOCK IN SHARE MODE]조회 시 자 물 쇠 를 추가 하거나 읽 습 니 다.
2.사무 거래
원자 적 인 SQL 문장 이나 독립 된 작업 단원
1.사 무 는 ACID 원칙 에 따른다.
A:atomicity 원자 성;전체 트 랜 잭 션 의 모든 작업 이 성공 적 으로 실행 되 거나 모두 실패 한 후 스크롤 백 합 니 다C:consistency 일치 성;데이터 베 이 스 는 항상 하나의 일치 성 상태 에서 다른 일치 성 상태 로 전환 된다
명시 적 사무:명확 한 규정 사무의 시작
암시 적 트 랜 잭 션:기본 값 은 암시 적 트 랜 잭 션 입 니 다.한 문장 을 실행 할 때마다 직접 제출 합 니 다.
autocommt={OFF|ON}자동 제출 을 열거 나 닫 습 니 다.'자동 제출'기능 대신 명시 적 요청 과 제출 을 사용 하 는 것 을 권장 합 니 다.
시작 사무:
START TRANSACTION;
탭 삽입:ROLLBACK TO ##;
지정 한 탭 취소:ROLLBACK TO ##;
모두 취소:ROLLBACK;
제출 사무:COMMIT;
태그 삭제:RELEASE SAVEPOINT;
MariaDB [school]> START TRANSACTION; #
MariaDB [school]> INSERT students(StuID,Name,Age,Gender) VALUES (26,'Tom',22,'M'); #
MariaDB [school]> SAVEPOINT sp26; #
MariaDB [school]> INSERT students(StuID,Name,Age,Gender) VALUES (27,'Maria',12,'F'); #
MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27); # ,
+-------+-------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+-------+-----+--------+---------+-----------+
| 26 | Tom | 22 | M | NULL | NULL |
| 27 | Maria | 12 | F | NULL | NULL |
+-------+-------+-----+--------+---------+-----------+
MariaDB [school]> ROLLBACK TO sp26; # sp26
MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27); # , maria
+-------+------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+------+-----+--------+---------+-----------+
| 26 | Tom | 22 | M | NULL | NULL |
+-------+------+-----+--------+---------+-----------+
MariaDB [school]> COMMIT; #
MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27); #
+-------+------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+------+-----+--------+---------+-----------+
| 26 | Tom | 22 | M | NULL | NULL |
+-------+------+-----+--------+---------+-----------+
3.업무 의 격 리 단계트 랜 잭 션 격 리 단계 수정:서버 변수 txisolation 지정,기본 값 REPEATABLE-READ,GLOBAL 과 SESSION 레벨 에서 설정 가능
tx_isolation
--transaction-isolation=name
REPEATABLE-READ
READ-UNCOMMITTED
, READ-COMMITTED
, REPEATABLE-READ
, SERIALIZABLE
MariaDB [school]> SELECT @@tx_isolation; #
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
MariaDB [school]> SET tx_isolation='READ-UNCOMMITTED';
MariaDB [school]> set tx_isolation='READ-COMMITTED';
MariaDB [school]> set tx_isolation='REPEATABLE-READ';
MariaDB [school]> set tx_isolation='SERIALIZABLE';
4.자물쇠두 개 이상 의 업무 가 같은 자원 에서 서로 점용 되 고 상대방 이 점용 하 는 자원 의 잠 금 을 요청 하 는 상태 에서 잠 금 이 발생 합 니 다.
A 사무 가 t1 표 의 세 번 째 줄 을 수정 하고 B 사무 가 t2 표 의 두 번 째 줄 을 수정 할 때;이때 A 사 무 는 t2 표 의 두 번 째 줄 을 수정 하 러 갔 는데 이때 A 사 무 를 막 았 다.그리고 B 사 무 는 t1 표를 수정 하 는 세 번 째 줄 이 있 었 다.이때 B 사무 도 막 혔 고 이때 자물쇠 가 생 겼 다.
두 사 무 는 동시에 상대방 이 수정 한 시 계 를 바 꾸 고 서로 막는다.시스템 은 자 물 쇠 를 발견 하고 대가 가 적은 일 을 자동 으로 희생 하여 자 물 쇠 를 풀 것 이다.
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
프로 세 스 목록 보기:
MariaDB [school]> SHOW PROCESSLIST;
처치 프로 세 스:MariaDB [school]> KILL 5;
MySQL 시리즈 의 10 MySQL 트 랜 잭 션 격 리 와 병행 제어 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 my sql 병행 제어 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!MySQL 시리즈 의 10 MySQL 트 랜 잭 션 격 리 와 병행 제어 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 my sql 병행 제어 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.