verständnisfrage zu lock tables
am 10.11.2005 09:22:10 von Tom SchenkHi,
ich habe eine Multiuseranwendung (php) geschrieben, in welcher ein Satz=20
von sql Statements über 3 Tabellen exclusiv durchlaufen muss. D.h. da=20
darf kein anderer User während der Lösch- und Schreibmethoden dazwische=
n=20
kommen. Ich habe mit autoincrement und mysql_insert_id gearbeitet, um zu=20
verhindert, das die Primär IDs bei 'gleichzeitigem' Einfügen von Daten=
=20
verschiedener Benutzer gemischt werden.
Pseudocode:
select ID from table A where .....
delete table B where ID =3D x
delete table C where ID =3D x
insert into table B
get last_insert_id from B
insert into table C set ... last_insert_id
(Nicht wundern, es geht nicht mit updates, da eine Art Versionierung=20
läuft.)
Damit kann ich aber IMHO nicht verhindern, das nach den Löschoperationen=
=20
ein anderer Benutzer dazwischenkommt. Jedenfalls hatt ich heute einen=20
Effekt (Relationen ins Nirwana) den ich nicht anders deuten kann.
Meine Idee ist nun ein LOCK auf die tables a (read) b und c (write)=20
durchzuführen. (Transaktionen gibt die eingesetzte mysql (noch) nicht=20
her) ABER da verstehe ich die mysql Doku in einem Punkt nicht ganz. Dort=20
steht das für den Thread die Tabellen gesperrt werden. Laut Server (top)=
=20
werden permanent mehrere mysql Prozesse gestartet. Sind das forks (also=20
Threads) eines Mutterprozesses oder eigenständige Prozesse?=20
Ich habe zwischen den delete und insert eine Zwangspause eingebaut und=20
ein anderer Lesevorgang (ohne Pause) schient auch wirklich auf das=20
unlock zu warten. Nur ist es recht schwierig 15 benutzer zu simulieren.
Funktioniert mein vorgehen somit oder nicht?
Bye
tom