Portál AbcLinuxu, 3. listopadu 2025 23:30
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 transaction
Je 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.