Portál AbcLinuxu, 19. května 2025 00:50
T1: set autocommit=0 => OK T2: set autocommit=0 => OK T1: insert into tabulka values ('test') => OK T2: insert into tabulka values ('test') => wait T1: delete from tabulka where id='test' => OK T2: => error: Deadlock found when trying to get lock; try restarting transactionJe pekne, ze mysql umi detekovat deadlock a vzpamatovat se z nej bez zatuhnuti, ale prece jen mam pocit, ze by bylo lepsi se deadlockum vyhybat. Prozradte mi prosim jak.
SELECT * FROM tabulka LOCK IN SHARE MODEpřípadně exkluzivní zamčení:
SELECT * FROM tabulka FOR UPDATE
The correct way to use LOCK TABLES and UNLOCK TABLES with transactional tables, such as InnoDB tables, is to begin a transaction with SET AUTOCOMMIT = 0 (not START TRANSACTION) followed by LOCK TABLES, and to not call UNLOCK TABLES until you commit the transaction explicitly.Takže správně by to mělo být:
set autocommit = 0; lock table t write; dělám něco s tabulkou t commit; unlock tables;To nefunguje?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.