MySql Transaktionen

lb4ne

Mitglied
MySql kann ja bekanntlich nur ganze Tabellen sperren.
Wie sieht das aber aus wenn ich eine Transaktion ausführe und dabei die lock Eigenschaft verwende? Werden dann alle betroffenen Datensätze gesperrt oder die betroffenen Tabellen?
:confused: :confused: :confused: :confused: :confused:
 
Hi, Ich kenn mich mit MySQL nicht aus, aber anhand deiner ersten Ausage würde ich sagen, wird auch da die komplette Tabelle gesperrt (du meinst doch den Befehl LOCK TABLE oder?)
Aber:
wenn ich die Hilfe dazu richtig verstanden hab, ist LOCK Table nicht möglich in Transaktionen. --> MySQL Reference Manual - LOCK TABLE
 
Es gibt bei einer Transaktion aber ein Isolationslevel, was ja implizit das Sperren einer Datenbank vorraussetzt.
Ich glaube auch dass die Tabelle komplett gesperrt wird, einer meiner Arbeitskollegen glaubt das aber nicht.
... bekanntlich ist glauben aber nicht wissen ...
 
Benutz einfach InnoDB und Du hast Transaktionen, zudem darf Dein TableSpace auch wesentlich größer werden als bei MyIsam und ist verteilbar ....

Zukünftig, soll es ja auch mal für MyIsam "echte" Transaktionen geben. Derzeit kann man immer wieder zurück auf MyIsam switchen.

Chris
 
Ich benutze schon InnoDB.
Bei echten Transaktionen werden ja nur die benötigten Objekte gesperrt, was mich wieder zu meiner Ausgangsfrage zurückbringt.
 
InnoDB benutzt Row-Level-Locking.
D.h.: Während des Updates sind alle betroffenen Sätze für's Schreiben gesperrt, bis eine Transaktion durch COMMIT oder ROLLBACK beendet wird.
Wichtig ist auch der "Isolation Level". Default ist "Repeatable Read". Besser ist "Read Commited", d.h., wenn von einem anderen User aus Sätzen gelesen wird, bei denen innerhalb einer noch nicht abgeschlossenen Transaktion Änderungen stattgefunden haben, dann liest dieser den Stand von vor dem Beginn der Transaktion.

Ja, wir verwenden MySQL mit InnoDB in einer Multi-User-Umgebung. InnoDB ist hervorragend geeignet dafür und mit den Einstellungen READ COMMITED und AUTOCOMMIT=0 bestens eigestellt für 99% aller Anwendungsgebiete. (Das sag ich mal so daher.)

Habe hier ein 480K großes PDF, das wir mal von der MySQL-Site geholt haben, das es dort aber nicht mehr zu geben scheint. Leider ist es zu groß zum hier hochladen. Es heißt: "2003-07-12-LinuxTag-InnoDB.pdf". Vielleicht findest Du es ja bei Google, oder schreib mir eine PN mit Deiner E-Mail-Adresse, dann Mail ich's Dir.

Martin
 

Neue Beiträge

Zurück