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

Undgå læsning ved opdatering af tabellen

Hvis du antager, at du bruger en transaktionsmotor (normalt Innodb), skal du rydde og genfylde tabellen i den samme transaktion.

Sørg for, at dine læsere bruger READ_COMMITTED eller højere transaktionsisoleringsniveau (standarden er REPEATABLE READ, som er højere).

På den måde vil læsere fortsat kunne læse det gamle indhold af tabellen under opdateringen.

Der er et par ting, du skal være opmærksom på:

  • Hvis bordet er så stort, at det udtømmer tilbagerulningsområdet - dette er muligt, hvis du opdaterer hele (f.eks.) en 1M rækketabel. Dette kan selvfølgelig justeres, men der er grænser
  • Hvis transaktionen mislykkes halvvejs og bliver rullet tilbage - tilbagerulning af store transaktioner er MEGET ineffektivt i InnoDB (det er optimeret til commits, ikke rollbacks)
  • Vær forsigtig med deadlocks og låse ventetimeouts, som er mere sandsynlige, hvis du bruger store transaktioner.


  1. TypeORM - Hvordan opretter man en ny tabel og kører migrering automatisk i produktionstilstand?

  2. Tabefeltstatus automatisk opdatering kontrollerer systemdato ved hjælp af forespørgsel i mysql og java

  3. GIS-udvidelse til Doctrine 2

  4. Hvad er SQL, og hvordan kommer man i gang med det?