>  기사  >  데이터 베이스  >  업데이트를 실행할 때 MySQL 데이터베이스가 멈추는 문제를 해결하는 방법

업데이트를 실행할 때 MySQL 데이터베이스가 멈추는 문제를 해결하는 방법

WBOY
WBOY앞으로
2023-05-26 19:07:052814검색

문제 분석

일반적으로 데이터베이스 트랜잭션이 제출되지 않아 업데이트 또는 삭제가 중단됩니다.

솔루션

  1. 업데이트 또는 삭제를 수행한 후 커밋할 트랜잭션을 제출해야 합니다.

  2. 데이터베이스 클라이언트를 찾아 커밋 작업을 수행하세요.

그래도 작동하지 않는다면. 데이터베이스가 데이터 작업을 수행하지 못하거나 트랜잭션이 커밋되지 않은 경우 실행해야 하는 SQL 문을 잠급니다.

프로세스 재현 및 해결

다음 명령을 통해 데이터베이스의 자동 제출 상태를 확인하세요

show variables like 'autocommit';

SQL을 통해 데이터베이스의 자동 자동 제출을 꺼짐으로 설정하세요

-- on为开启,off为关闭
set autocommit=off;
-- 或者1为开启,0为关闭
set autocommit=0;

표의 데이터는 다음과 같습니다

업데이트를 실행할 때 MySQL 데이터베이스가 멈추는 문제를 해결하는 방법

두 개의 창을 열어 업데이트를 별도로 실행합니다. 작업

update car set color ='银色' where id = 1;
update car set color ='红色' where id = 1;

실행 중인 트랜잭션 쿼리:

SELECT * FROM information_schema.INNODB_TRX;

업데이트를 실행할 때 MySQL 데이터베이스가 멈추는 문제를 해결하는 방법

그림 속 트랜잭션의 스레드 ID(trx_mysql_thread_id)에 따라 해당 mysql 스레드를 볼 수 있습니다. 1084(업데이트가 잠금을 기다리고 있음)이고 다른 하나는 1089(업데이트 트랜잭션이 커밋 없이 실행되고 있음)

mysql 명령을 사용하여 스레드를 종료할 수 있습니다: kill thread id

kill 1089;

스레드가 보류 중인 경우 잠금은 해당 기간 동안 종료되지 않습니다. 두 번째 업데이트 문은 잠금 시간이 초과될 때까지 기다리는 메시지를 표시합니다.

업데이트를 실행할 때 MySQL 데이터베이스가 멈추는 문제를 해결하는 방법

관련 명령:

-- 查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

-- 查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
-- 查询mysql数据库中存在的进程
select * from information_schema.`PROCESSLIST`(show processlist;)

확장

oracle 작업 방법:

잠금 기록 쿼리

SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;

잠금 기록 삭제

ALTER system KILL session 'SID,serial#';

위 내용은 업데이트를 실행할 때 MySQL 데이터베이스가 멈추는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제