일반적으로 데이터베이스 트랜잭션이 제출되지 않아 업데이트 또는 삭제가 중단됩니다.
업데이트 또는 삭제를 수행한 후 커밋할 트랜잭션을 제출해야 합니다.
데이터베이스 클라이언트를 찾아 커밋 작업을 수행하세요.
그래도 작동하지 않는다면. 데이터베이스가 데이터 작업을 수행하지 못하거나 트랜잭션이 커밋되지 않은 경우 실행해야 하는 SQL 문을 잠급니다.
다음 명령을 통해 데이터베이스의 자동 제출 상태를 확인하세요
show variables like 'autocommit';
SQL을 통해 데이터베이스의 자동 자동 제출을 꺼짐으로 설정하세요
-- on为开启,off为关闭 set autocommit=off; -- 或者1为开启,0为关闭 set autocommit=0;
표의 데이터는 다음과 같습니다
두 개의 창을 열어 업데이트를 별도로 실행합니다. 작업
update car set color ='银色' where id = 1; update car set color ='红色' where id = 1;
실행 중인 트랜잭션 쿼리:
SELECT * FROM information_schema.INNODB_TRX;
그림 속 트랜잭션의 스레드 ID(trx_mysql_thread_id)에 따라 해당 mysql 스레드를 볼 수 있습니다. 1084(업데이트가 잠금을 기다리고 있음)이고 다른 하나는 1089(업데이트 트랜잭션이 커밋 없이 실행되고 있음)
mysql 명령을 사용하여 스레드를 종료할 수 있습니다: kill thread id
kill 1089;
스레드가 보류 중인 경우 잠금은 해당 기간 동안 종료되지 않습니다. 두 번째 업데이트 문은 잠금 시간이 초과될 때까지 기다리는 메시지를 표시합니다.
관련 명령:
-- 查看正在锁的事务 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!