>  기사  >  데이터 베이스  >  mysql에서 업데이트하면 테이블이 잠깁니까?

mysql에서 업데이트하면 테이블이 잠깁니까?

WBOY
WBOY원래의
2022-05-26 14:42:368471검색

mysql의 업데이트가 테이블을 잠그는 상황은 두 가지입니다. 1. 업데이트에 인덱스가 없는 경우 문의 이전 트랜잭션이 커밋을 통해 제출되고 명령이 정상적으로 실행된 후 종료된 다음 업데이트가 잠깁니다. 2. 업데이트가 인덱스를 추가하면 명령이 중단되지 않고 테이블을 잠그지 않지만 동일한 행을 업데이트하고 행 잠금을 유발합니다.

mysql에서 업데이트하면 테이블이 잠깁니까?

이 튜토리얼의 운영 환경: windows10 시스템, mysql8.0.22 버전, Dell G3 컴퓨터.

mysql에서 업데이트하면 테이블이 잠기나요?

인덱스가 없으면 업데이트하면 테이블이 잠깁니다. 인덱스가 추가되면 해당 행이 잠깁니다.

커밋을 통해 이전 트랜잭션이 제출되면 명령이 잠깁니다. 정상적으로 실행되고 종료됩니다. 설명은 시계가 잠겨 있습니다.

두 가지 상황:

  • 1. 인덱스 포함

  • 2. 인덱스 없음

전제 조건 소개:

방법: 명령줄을 사용하여 시뮬레이션

1.mysq는 기본적으로 활성화됩니다. 따라서 먼저 현재 데이터베이스에 자동 트랜잭션 커밋이 활성화되어 있는지 확인해야 합니다.

명령: select @@autocommit;

결과는 다음과 같습니다.

mysql에서 업데이트하면 테이블이 잠깁니까?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.