Hello,
Da sieht mir Rouvens Lösung mit nem Trigger doch deutlich effizienter aus...
Nur dass die auch nicht ohne Lock funktionieren kann.
In einem Update ... Select dürfen nur Spalten aus _anderen_ als der updateten Tabelle benutzt werden und schon gar nicht dieselbe Spalte, die updated werden soll.
Der Trigger bindet auch nicht das Insert, das Update und das Select-Statement zu einem atomaren Statement. Da musst Du trotzdem selber mit einem LOCK machen. Ein Recordlock sit bei MySQL nicht so prall. Bliebt also nur ein Table Lock.
Außerdem solltest Du bei Schlüsseln (und die Sub-Keys sind ja auch welche) nur mit verlorenen Schlüsseln arbeiten, also einen einmal vergebenen Schlüssel nicht wieder vergeben. Wenn Du aber ermöglichen willst, dass aus der BLOG-Tabelle Einträge gelöscht werden dürfen, dann funktioniet die Schlüsselermittlung mit max() nicht mehr. Dann dürftest Du ja nie den letzten Datensatz eine Subkey-Linie löschen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg