Mysql
 sql >> Datenbank >  >> RDS >> Mysql

gleichzeitiger Zugriff auf die MySQL-Datenbank mit gespeicherter Prozedur

Verwenden Sie zunächst, wie in einem anderen Beitrag angegeben, InnoDB. Es ist die standardmäßige Speicher-Engine ab MySQL 5.5 und robuster.

Sehen Sie sich zweitens diese Seite an:http:// dev.mysql.com/doc/refman/5.5/en/innodb-locking-reads.html

Sie sollten ein SELECT ... FOR UPDATE verwenden, um zu verhindern, dass andere Verbindungen die zu aktualisierende Zeile lesen, bis Ihre Transaktion abgeschlossen ist:

START TRANSACTION;

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

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

COMMIT;

Dies ist besser als das Sperren der Tabelle, da InnoDB Sperren auf Zeilenebene durchführt. Die obige Transaktion würde nur die Zeilen sperren, in denen id =5 ist ... also würde eine andere Abfrage, die mit id =10 arbeitet, nicht von dieser Abfrage aufgehalten werden.