Datenbank - /sql-Transaktions-Objekte sicher für den gleichzeitigen Zugriff?
Ich ausführen müssen mehrere SQL Abfragen (select
, update
, delete
) gleichzeitig und roll zurück, wenn goroutine Fehler aus. Also die Frage: sind die DB - Transaktionen sicher für gleichzeitigen Zugriff?
- Es gibt zwei Schichten, die hier beteiligt sind: Transaktionen auf der Datenbank-engine-Ebene (MySQL unterstützt Sie, wenn Sie die zugrunde liegende Datenbank-engine unterstützt (InnoDB funktioniert)) und Instanzen von
database/sql
Bibliothek-Typen, die die Vermittlung zwischen Programm und Datenbank-engine Transaktionen. Diese sind separate Konzepte (wenn auch Verwandte) und Sie haben wirklich richtig zu erklären, welche Sie interessiert. Meinst duMySQL
Transaktionen von Instanzen vonsql.Tx
geben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
DB ist sicher für den Zugriff von mehreren goroutines:
Auch
Stmt
sichere Nutzung von mehreren goroutines:Sollten Sie nur eine
sql.Tx
pro goroutine:Im Allgemeinen ja, aber Sie haben die Ebene zu definieren, von der Sicherheit, die Sie benötigen. Die drei standard-Phänomene, die auftreten können in einer Transaktion sind:
Abhängig davon, welches Verhalten akzeptiert wird, die Sie verwenden können, verschiedene Isolationsstufen:
Im Allgemeinen die "höheren" isolation-level Sie verwenden, desto schlechter ist die Parallelität, die Sie erhalten. Ärmer in dem Sinne, dass mehrere Schlösser verwendet werden und blockiert gleichzeitige Abfragen von anderen Transaktionen. Wenn Sie wissen, dass Sie aktualisieren eine Zeile, die ausgewählt ist, können Sie select ... for update.
Siehe zum Beispiel http://en.wikipedia.org/wiki/Isolation_%28database_systems%29 für eine ausführliche Erklärung.