Hello,
id | blog_id | entry_id | ....
1 | 1 | 1 | ....
2 | 1 | 2 | ....
3 | 2 | 1 | ....
4 | 1 | 3 | ....
Du müsstest eigentlich eine weitere Tabelle führen für die Blogs und die jeweils nächste Entry-ID
ID_TABLE
blog_id | next_entry_id | ....
autoinc | |
------------------------------
1 | 4 | ....
2 | 2 | ....
Und dann wirst Du nicht drum herumkommen, den betroffenen Datensatz in dieser Nachschlagetabelle für die beiden notwendigen Statements zu sperren
Für das Anlegen eines neuen Entrys benötigst Du die die nächste Entry-ID
lock record in ID_TABLE für blog_id = $blog_id
select next_entry_id aus ID_TABLE für blog_id = $blog_id
update next_entry_id in ID_TABLE mit next_entry_id+1 für blog_id = $blog_id
unlock table ID_TABLE
oder eben für das Anlegen eines neuen Blogs die nächste Nummer besorgen
insert
select next_entry_id ... for blog_id = last_insert_id()
Da ist mMn keine Sperre notwendig, da der Eintrag einen _neuen_ Datensatz erzeugt, der dann für die next_entry_id den Default 1 haben muss und die blog_id automatisch hochzählt.
In wieweit man bei MySQL inzwischen ein Update über mehrere Tabellen und ein Subselect auf einer dieser beiden kombinieren kann zu einem atomar abgehandelten Statement, weiß ich nicht.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg