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

Hvornår skal jeg bruge MySQL-transaktioner?

Transaktioner bruges, når du har en gruppe af forespørgsler, der alle afhænger af hinanden.

For eksempel en bank:

  • Bankkunden "John" overfører $100 til kontoen for "Alice".
  • I dette eksempel er der 2 forespørgsler (jeg viser ikke logning eller transaktionshistorik... osv.). Du skal trække $100 fra Johns saldo og føje det til Alices saldo.
  • Start transaction
  • Træk fra John
    • UPDATE accounts SET balance=balance-100 WHERE account='John'
  • Føj til Alice
    • UPDATE accounts SET balance=balance+100 WHERE account='Alice'
  • commit

En transaktion gemmes ikke, før du begår den. Så hvis der var en fejl i en af ​​forespørgslerne, kan du kalde rollback og fortryd alle forespørgsler, der er kørt siden transaktionen blev startet. Hvis forespørgslen om at tilføje $100 til Alice af en eller anden grund mislykkedes, kunne du rulle tilbage og ikke trække $100 fra John. Det er en måde at sikre, at du kan fortryde forespørgsler automatisk, hvis det er nødvendigt.

  • Skal jeg starte en transaktion, når jeg udfører to eller flere slette/opdater/indsæt forespørgsler?

    Afhænger af, hvad forespørgslerne gør.

  • Skal jeg også starte en transaktion, når jeg kun har én slette/opdatering/indsæt forespørgsel?

    Ikke nødvendigt, medmindre du havde brug for en måde at rulle tilbage (fortryd) forespørgslen på, ligesom du vil lave en opdatering og validere den, før du kalder commit (gem).

  • Skal jeg starte en transaktion 10 gange på en side, eller bedre kun én gang for hele siden, eller anbefaler du et maksimum for hver side (f.eks. 5)?

    Start så mange, du har brug for. Jeg tvivler på, at du har flere transaktioner pr. side, da du højst sandsynligt ville gøre én ting ved hver sideindlæsning (dvs. at overføre penge).



  1. Kan ikke forbinde MySQL-beholder til Tomcat-beholder i docker

  2. Skrivning til MySQL-database med pandaer ved hjælp af SQLAlchemy, to_sql

  3. Hvad er den bedste måde at forbinde iPhone-app (iOS SDK) til php/MySql-backend

  4. Cx-Freeze:Showwarning AttributeError:'NoneType'-objekt har ingen attribut 'write'