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

Skinner transaktioner

Hvis du har en blanding af kode, der har brug for eksplicitte transaktioner og kode, der kan stole på autocommit, bør du måske ikke deaktivere autocommit for alle forbindelser. Du er på rette vej og spekulerer på, om dette vil påvirke anden kode. Hvis du deaktiverer autocommit, men den anden kode ikke ved, at den skal forpligte sig for at få sit arbejde begået, så vil det være et problem. Uforpligtet arbejde rulles tilbage, når forbindelsen lukkes.

Du skal være opmærksom på, at standardlagringsmotoren til MySQL er MyISAM , som slet ikke understøtter transaktioner. Når du foretager ændringer i en tabel, der bruger MyISAM, forpligtes ændringerne effektivt med det samme, uanset dine eksplicitte anmodninger om at begynde og afslutte transaktioner, og uanset tilstanden af ​​autocommit. Så du vil ikke være i stand til at rulle tilbage uanset hvad, medmindre du har oprettet dine tabeller ved hjælp af InnoDB lagringsmotor (eller andre transaktionssikre lagringsmotorer såsom BDB ).

Det er unødvendigt for at deaktivere autocommit-tilstand for at bruge transaktioner i MySQL. Du skal blot begynde en transaktion eksplicit. Følgende SQL-sætninger vil være en del af en transaktion, indtil du forpligter eller ruller tilbage den pågældende transaktion, uanset værdien af ​​autocommit på din nuværende forbindelse.

http://dev.mysql.com/doc/refman/5.0 /da/commit.html siger:



  1. Hvad er meningen med IKKE NULL DEFAULT ''?

  2. MySQL-serverstartproblemer på Mavericks

  3. Simpel PHP SQL login fejlfinding

  4. Hvordan matcher jeg to værdier fra 1 kolonne i MYSQL