sql >> Database >  >> RDS >> Mysql

Hoe MySQL-transacties testen?

Allereerst is er een fout in uw implementatie. Als een query fout gaat, wordt de huidige transactie automatisch teruggedraaid en vervolgens gesloten. Dus als u doorgaat met het uitvoeren van query's, bevinden ze zich niet binnen een transactie (ze worden vastgelegd in de DB). Wanneer u vervolgens Rollback . uitvoert , het zal stilletjes mislukken. Uit de MySQL-documenten :

Rolling back can be a slow operation that may occur implicitly without the user 
having explicitly asked for it (for example, when an error occurs).

Het expliciete commando ROLLBACK mag alleen worden gebruikt als u in de toepassing bepaalt dat u moet terugdraaien (om andere redenen dan een queryfout). Als u bijvoorbeeld geld van een account afschrijft, zou u expliciet terugdraaien als u erachter komt dat de gebruiker niet genoeg geld heeft om de uitwisseling te voltooien...

Wat het testen van de transacties betreft, kopieer ik de database. Ik maak een nieuwe database aan en installeer een set "dummy-gegevens". Vervolgens voer ik alle tests uit met een geautomatiseerde tool. De tool zal de transacties daadwerkelijk vastleggen en terugdraaien forceren, en controleren of de verwachte databasestatus tijdens de tests behouden blijft. Aangezien het moeilijker is om programmatisch de eindstatus van een transactie te kennen als u een onbekende invoer voor de transactie hebt, zal het testen van live (of zelfs gekopieerde-van-live) gegevens niet eenvoudig zijn. U kunt het (en zou het moeten doen), maar vertrouw niet op die resultaten om te bepalen of uw systeem werkt. Gebruik die resultaten om nieuwe testgevallen voor de geautomatiseerde tester te bouwen...



  1. Waarschuwing:mysql_num_rows():opgegeven argument is geen geldige MySQL-resultaatbron

  2. waarde te lang voor type karakter variërend (N)

  3. Hoe weet ik of MySQLnd het actieve stuurprogramma is?

  4. Verhoog een databaseveld met 1