sql >> Database teknologi >  >> RDS >> Mysql

Hvordan tester man MySQL-transaktioner?

Først og fremmest er der en fejl i din implementering. Hvis en forespørgsel fejler, rulles den aktuelle transaktion automatisk tilbage og lukkes derefter. Så når du fortsætter med at udføre forespørgsler, vil de ikke være i en transaktion (de vil blive forpligtet til DB). Derefter, når du udfører Rollback , vil det lydløst mislykkes. Fra MySQL-dokumenterne :

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).

Den eksplicitte kommando ROLLBACK bør kun bruges, hvis du i applikationen bestemmer, at du skal rulle tilbage (af andre årsager end en forespørgselsfejl). Hvis du f.eks. trækker penge fra en konto, ville du eksplicit rulle tilbage, hvis du fandt ud af, at brugeren ikke havde penge nok til at gennemføre udvekslingen...

Hvad angår test af transaktionerne, kopierer jeg databasen. Jeg opretter en ny database og installerer et sæt "dummy data". Så kører jeg alle testene ved hjælp af et automatiseret værktøj. Værktøjet vil faktisk begå transaktionerne og gennemtvinge tilbagerulninger og kontrollere, at den forventede databasetilstand opretholdes gennem testene. Da det er sværere programmatisk at kende sluttilstanden fra en transaktion, hvis du har et ukendt input til transaktionen, bliver det ikke nemt at teste live (eller endda kopieret-fra-live) data. Du kan gøre det (og bør), men du er ikke afhængig af disse resultater for at afgøre, om dit system fungerer. Brug disse resultater til at bygge nye testcases til den automatiserede tester...



  1. Hvad skal jeg vælge - JSON eller SQLite?

  2. Udenlandske nøglebegrænsninger under dumping af data

  3. Hent alle nyheder og alle kommentarer

  4. Hvorfor er PHP PDO DSN et andet format for MySQL versus PostgreSQL?