Aplikace pracovala následovně:
V to popisu si protiřečíte. Píšete tam o několika zapisujících operacích, že přístup odjinud byl pouze pro čtení, a pak že tam nebyl konkurenční přístup. Pokud se tam četlo i zapisovalo, nebo se tam provádělo víc operací zápisu, byl tam konkurenční přístup.
Otázka už zde padla. Jakým způsobem používat MySQL správně tak, aby update proběhl a následný select vrátil řetězec 'petr'?
Já bych si podle toho, co zde bylo napsáno, tipnul, že se ta tabulka někdy nabořila (např. nečekaným ukončením databáze), nikdo nikdy ji pak nezkontroloval a zápisy do poškozených částí pak selhávaly.
Používat správně – použít InnoDB nebo jiný transakční engine, kontrolovat, že update proběhl, že byl potvrzen commit. Podle izolace transakcí provádět select v takové transakci, která vidí změny provedené v updatovací transakci. Monitorovat stav databáze a reagovat na případné chyby.
A pokud je to možné, použil bych spíš PostgreSQL, přeci jen je to na rozdíl od MySQL plnohodnotná databáze. Ale chápu, že pokud to má být nějaká aplikace provozovaná na levném webhostingu, je jediná možnost MySQL – platí se za to tím, že nemáte k dispozici spoustu vlastností plnohodnotných databází (i když i do MySQL se takové vlastnosti pomalu doplňují).