sql >> Databasteknik >  >> RDS >> Mysql

Förhindra läsning vid uppdatering av tabellen

Förutsatt att du använder en transaktionsmotor (vanligtvis Innodb), rensa och fyll på tabellen i samma transaktion.

Se till att dina läsare använder READ_COMMITTED eller högre transaktionsisoleringsnivå (standard är REPEATABLE READ vilket är högre).

På så sätt kommer läsarna att fortsätta att kunna läsa det gamla innehållet i tabellen under uppdateringen.

Det finns några saker att vara försiktig med:

  • Om tabellen är så stor att den tar ut återställningsområdet - detta är möjligt om du uppdaterar hela (säg) en 1M radtabell. Naturligtvis går det att justera men det finns gränser
  • Om transaktionen misslyckas halvvägs och rullas tillbaka - att rulla tillbaka stora transaktioner är MYCKET ineffektivt i InnoDB (det är optimerat för commits, inte rollbacks)
  • Var försiktig med dödlägen och tidsgränser för låsning av väntan, vilket är mer sannolikt om du använder stora transaktioner.


  1. Hur fixar du ett fel i MySQL Felaktig nyckelfil när du inte kan reparera tabellen?

  2. php/timeout/anslutningen till servern återställd?

  3. mysql välj ENDAST dubbletter från databasen

  4. Räknar nya kunder per månad