mysql의 업데이트가 테이블을 잠그는 상황은 두 가지입니다. 1. 업데이트에 인덱스가 없는 경우 문의 이전 트랜잭션이 커밋을 통해 제출되고 명령이 정상적으로 실행된 후 종료된 다음 업데이트가 잠깁니다. 2. 업데이트가 인덱스를 추가하면 명령이 중단되지 않고 테이블을 잠그지 않지만 동일한 행을 업데이트하고 행 잠금을 유발합니다.
이 튜토리얼의 운영 환경: windows10 시스템, mysql8.0.22 버전, Dell G3 컴퓨터.
인덱스가 없으면 업데이트하면 테이블이 잠깁니다. 인덱스가 추가되면 해당 행이 잠깁니다.
커밋을 통해 이전 트랜잭션이 제출되면 명령이 잠깁니다. 정상적으로 실행되고 종료됩니다. 설명은 시계가 잠겨 있습니다.
두 가지 상황:
1. 인덱스 포함
2. 인덱스 없음
전제 조건 소개:
방법: 명령줄을 사용하여 시뮬레이션
1.mysq는 기본적으로 활성화됩니다. 따라서 먼저 현재 데이터베이스에 자동 트랜잭션 커밋이 활성화되어 있는지 확인해야 합니다.
명령: select @@autocommit;
결과는 다음과 같습니다.
1이면 다음 명령을 실행합니다. set autocommit = 0; 자동 제출을 설정하지 않도록 설정
2. 데이터베이스 테이블 형식은 다음과 같습니다
tb_user | CREATE TABLE `tb_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, `phone` varchar(11) DEFAULT NULL, `operator` varchar(32) DEFAULT NULL, `gmt_create` datetime DEFAULT NULL, `gmt_modified` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
분명히 기본 키 외에는 인덱스를 추가하지 않았습니다
실제 예:
1. 인덱스 없음
명령을 실행합니다. 트랜잭션을 시작한 다음 명령을 실행합니다. : update tb_user setphone=11 where name="c1"; 수정하려면 먼저 트랜잭션을 커밋하지 마세요.
다른 창을 열고 명령을 직접 실행하십시오. update tb_user setphone=22 where name="c2"; 명령이 중단된 것을 알 수 있지만 이전 트랜잭션이 커밋을 통해 제출되면 명령이 정상적으로 실행되고 종료됩니다. , 시계가 잠겨 있음을 나타냅니다.
2. 이름 필드에 인덱스를 추가합니다.
create index index_name on tb_user(name);
그런 다음 트랜잭션을 열고 update tb_user setphone=11을 실행하는 작업을 계속합니다. 여기서 name="c1"을 먼저 제출하지 마세요.
그런 다음 또 다른 업데이트 실행 tb_user set Phone=22 where name="c2"; 그리고 명령이 중단되지 않는 것을 확인합니다. 이는 잠금 테이블이 없음을 나타냅니다그러나 또 다른 업데이트가 tb_user set Phone=22 where name=" c1"; 같은 행을 업데이트하면 잠금 테이블이 없다는 뜻 행 잠금입니다3. 요약
인덱스가 없으면 업데이트하면 테이블이 잠깁니다. 인덱스가 추가되면, 행이 잠깁니다
추천 학습: mysql 비디오 튜토리얼
🎜위 내용은 mysql에서 업데이트하면 테이블이 잠깁니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!