sql >> Databasteknik >  >> RDS >> Mysql

samtidig åtkomst till MySQL-databasen med hjälp av lagrad procedur

Först, som anges i ett annat inlägg, använd InnoDB. Det är standardlagringsmotorn från och med MySQL 5.5 och är mer robust.

För det andra, titta på den här sidan:http:// dev.mysql.com/doc/refman/5.5/en/innodb-locking-reads.html

Du bör använda en SELECT ... FÖR UPPDATERING för att förhindra att andra anslutningar läser raden du ska uppdatera tills din transaktion är klar:

START TRANSACTION;

SELECT value INTO @value
FROM mytable
WHERE id = 5
FOR UPDATE;

UPDATE mytable
SET value = value + 1
WHERE id = 5;

COMMIT;

Detta är bättre än att låsa tabellen eftersom InnoDB gör radnivålås. Transaktionen ovan skulle bara låsa raderna där id =5... så en annan fråga som arbetar med id =10 skulle inte hållas uppe av den här frågan.



  1. python 3.5 - django 1.10 - mysqlclient Windows 7 installationsfel

  2. Varför MySQL:s LEFT JOIN returnerar NULL-poster när med WHERE-klausul?

  3. Oracle kopiera data till en annan tabell

  4. Hur man kontrollerar om en tabell finns i ett givet schema