Martin Dunst: (MySQL 4.0) InnoDB: LOCK IN SHARE MODE

Beitrag lesen

Hallo,

Ich habe begonnen, mit Locks und Transactions zu experimentieren.
Gegeben ist eine MySQL 4.0.12-Datenbank, die aus MyISAM-Tabellen besteht, einzige InnoDB-Tabelle sei 'locktest'.

Folgendes Test-Szenario wird von Client1 und Client2 zeitlich versetzt durchlaufen:

# Warten, wenn InnoBD-Record gesperrt  
# ------------------------------  
SET AUTOCOMMIT=1;  
UPDATE locktest SET lockedby='Client1' WHERE type='planning';  
  
# InnoBD-Record sperren  
# ------------------------------  
SET AUTOCOMMIT=0;  
SELECT type FROM locktest WHERE type='planning' LOCK IN SHARE MODE;  
  
# Queries auf MyISAM-Tabellen ausfuehren  
# ------------------------------  
INSERT INTO myisamtable (...) VALUES (...);  
  
# InnoBD-Record freigeben  
# ------------------------------  
COMMIT;  
SET AUTOCOMMIT=1;  
UPDATE locktest SET lockedby='' WHERE type='planning';  

In MySQL 5.0.27 funktioniert der Testfall wie geplant. Client2 wartet, bis Client1 das InnoDB-Record freigegeben hat und sperrt es dann seinerseits.
Das INSERT in die MyISAM-Tabelle 'myisamtable' wird sofort ausgeführt.

In MySQL 4.0.12 passiert folgendes:
Das Locking funktioniert nur dann, wenn das 'INSERT INTO myisamtable...' NICHT abgesetzt wird.
Wird es abgesetzt, dann geht offenbar auch der Lock flöten und Client2 wartet NICHT, bis Client1 das InnoDB-Record freigegeben hat.

Ich wäre dankbar für Hinweise,
1.) warum das so ist und
2.) wie man MySQL 4.0 dazu bringt, sich in diesem Fall so wie MySQL 5.0 zu verhalten.

lg
Martin Dunst

--
Do what I say, not what I do.
--Tim Berners-Lee