Thread Lock auf MySql-table notwendig? (12 answers)
Opened by gast at 2010-12-24 15:35

topeg
 2010-12-24 18:29
#143808 #143808
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Man sperrt eine Tabelle nur wenn man viele Aktionen auf diese anwendet bei deren Zwischenschritten man eine nicht funktionstüchtige Tabelle hat. Wenn es nur um das einfügen/ändern geht, so passt die DB schon darauf auf dass die Einträge so schnell wie möglich allen anderen Zugreifenden zur Verfügung stehen.

Mal ein dummes Beispiel wo man sperren würde.
Man habe eine Tabelle mit einer ID und einem Namen. Bei einer Alphabetischen Sortierung der Namen sollen die IDs aufeinander folgend aufsteigend sein. Das bedeutet bei jedem eingefügten Namen müssen alle IDs neu vergeben werden, dass lässt sich ohne weiteres nicht mit einer atomaren Aktion machen (eine nicht aufteilbare Aktion) Bis alle IDs vergeben sind ist die Tabelle nicht funktionstüchtig. (keine IDs oder doppelte IDs vorhanden) Also muss die Tabelle bis zum Abschluss der ID-Vergabe gesperrt werden, damit es zu keinen fehlerhaften Abfrageergebnissen kommt.

Bei einem einfachen einfügen/ändern eines Datensatzes braucht man das nicht, das diese Aktionen atomar sind.

Wenn du sicher stellen willst, das ein Eintrag tatsächlich einzigartig ist, so kannst du das auch ohne sperren der Tabelle erreichen, indem du die Spaten, die eindeutig sein sollen "UNIQUE" machst. Wenn eine Kombination von Spalten einzigartig sein sollen so bilde über diese eine Quersumme (z.B MD5) und Speicher das in einer Spalte die "UNIQUE" ist.

View full thread Lock auf MySql-table notwendig?