han: lock bei mysql ? wann?

Hallihallöle,

ich habe eine Frage zu dem locken bei mysql:

Wann sollte ich locken, und wann lohnt es sich nicht?
Ich meine das locken ist ja hauptsächlich um Komplikationen zu verhindern bei mehreren Abfragen o.ä., aber wenn nur Daten abgefragt werden, dann müsste es doch egal sein, wenn mehrer Anfragen kommen und die Daten eben mehrfach ausgeliefert werden?

Und wie ist das mit den read und dem write lock,
ich verstehe das nicht ganz in der Manual?

grieli

  1. Hello,

    Wann sollte ich locken, und wann lohnt es sich nicht?
    Ich meine das locken ist ja hauptsächlich um Komplikationen zu verhindern bei mehreren Abfragen o.ä., aber wenn nur Daten abgefragt werden, dann müsste es doch egal sein, wenn mehrer Anfragen kommen und die Daten eben mehrfach ausgeliefert werden?

    Und wie ist das mit den read und dem write lock,
    ich verstehe das nicht ganz in der Manual?

    Ein Lock ist immer dann notwendig, wenn zwischen zwei oder mehr gekoppelten Aktionen ein Konsistenzwechsel der Daten stattfinden könnte. Dieser Wechsel geschieht i.d.R. aus fremder Veranlassung, also durch einen weiteren User oder Prozess.

    Ein Read-Lock verhindert nur das Verändern der Daten durch andere Prozesse, gestattet dieses aber noch, die Daten zu lesen.

    In dem Moment, wo Du vor hast, die Daten zu verändern, benötigst Du ein Write-Lock.

    Solange Du schreibst, kann dann niemand anders lesen oder schreiben.

    Bei Datenbanken reicht meistens eine (gekoppelte) Satzsperre, das selten die Eigenschaften der gesamten Tabelle verändert werden, sondern nur die eines Datensatzes, bzw. verschiedener Datensätzes unterscheidlicher Tabellen.

    Um einen einzigen Datensatz zu verändern, benötigt man bei SQL-Datenbanken kein eigenes Lock, da die Datenbank dies selbst besorgt.
    Dies gilt auch für mehrere Datensätze einer Tabelle, wenn die Veränderung durch ein einziges Statement geschieht. Statements werden "atomar" abgewickelt.

    Grüße

    Tom

    1. Ein Lock ist immer dann notwendig, wenn zwischen zwei oder mehr gekoppelten Aktionen ein Konsistenzwechsel der Daten stattfinden könnte.

      Anders formuliert, wenn eine Transaktion erforderlich ist und das RDBMS diese als Objekt nicht kennt, dann lockt man.

      Der Fragesteller hat übrigens einige Counter (BTW - DOPPELPOSTING!), bei denen er sicherstellen möchte, dass es keine Dubletten (und mglw. auch keine Lücken) geben darf.