Ich traf mit einem seltsamen Problem über sqlite3. Ich habe verschiedene Verbindungen der gleichen Datenbankdatei mit der Methode open() erhalten. Verbindung 1 beginnt eine Transaktion und Verbindung 2 beginnt eine andere Transaktion, die mehrere Datensätze einer Tabelle aktualisieren soll. Dann commit Verbindung 1 die Transaktion, gefolgt von Verbindung 2 commit ihre Transaktion. Aber ich habe festgestellt, dass der Update-Befehl von Verbindung 2 den Datensatz in der Datenbank nie wirklich aktualisiert. Während dieses Vorgangs wird keine Ausnahme ausgelöst. Ich weiß nicht, warum das Problem auftritt. Kann mir jemand den Grund erklären?Können verschiedene Verbindungen der gleichen SQLite-Datenbank Transaktionen gleichzeitig starten?
Q
Können verschiedene Verbindungen der gleichen SQLite-Datenbank Transaktionen gleichzeitig starten?
7
A
Antwort
14
Wenn Sie die SQLite-Dokumentation lesen, werden Sie sehen, dass es mehrere Verbindungen nur zum Lesen unterstützt. Sie können nicht aus mehreren Verbindungen in die Datenbank schreiben, da dies nicht dafür gedacht ist.
5
Sofern Sie den sofortigen Einsatz BEGIN Ihre Transaktionen zu initiieren, laufen Sie Gefahr, dass sie rückgängig zu machen und wieder versuchen. A BEGIN macht keine Verriegelung; Das nachfolgende UPDATE oder INSERT ruft die Sperre ab und Sie müssen den Ergebniscode überprüfen, um festzustellen, ob sie fehlgeschlagen sind. Siehe diese Seite unter transactions und diese auf locks.
Verwandte Themen
- 1. können wir verschiedene Abfragen in einer gespeicherten Prozedur gleichzeitig ausführen?
- 2. Hibernate und Cassandra Db Verbindungen und Transaktionen
- 3. Können zwei verschiedene Chef-Clients gleichzeitig auf demselben Host arbeiten?
- 4. Können Winsock-Verbindungen zufällig fehlschlagen?
- 5. Arraylist auf X verschiedene Arten gleichzeitig sortieren
- 6. Wie verwendet man Transaktionen für verschiedene Kontexte?
- 7. Farbrampe mit der gleichen Farbskala über verschiedene Plots in R
- 8. SWING - Verschiedene Farben in der gleichen JPanel
- 9. Verschiedene Generics T in der gleichen Sammlung
- 10. Loading verschiedene Versionen der gleichen Baugruppe
- 11. Verschiedene Boxplots auf der gleichen OX-Position
- 12. Vergleichen Sie verschiedene Aufträge der gleichen Tabelle
- 13. zwei verschiedene Video-Streams gleichzeitig anzeigen
- 14. Starten von Monetdb für Remote-Verbindungen
- 15. Starten Sie Jenkins Jobs gleichzeitig synchron
- 16. Können wir Transaktionen für C# -Objekte implementieren?
- 17. Python Async-Transaktionen psycopg2
- 18. Wie werden verschiedene TCP-Verbindungen in HTTP-Anfragen identifiziert?
- 19. Wie können wir starten und schlafen mehrere Threads gleichzeitig während des Einfügens in die Datenbank
- 20. Chrome js debug - zwei verschiedene Werte gleichzeitig
- 21. Gleichzeitige Verbindungen mit Apache aus dem gleichen Client
- 22. Maximale Anzahl von Verbindungen, die von s3 gehalten werden können
- 23. Winsock 15 Verbindungen zur gleichen Zeit wird instabil
- 24. Wie können verschiedene Blöcke in einem SM laufen (Streaming Multiprozessor)
- 25. Verbindungen zur Arbeit können nicht erstellt werden
- 26. Wie können EntityManager-Verbindungen ordnungsgemäß geschlossen werden?
- 27. Wie können JDBC-Verbindungen wiederverwendet werden?
- 28. AppEngine-Transaktionen
- 29. Zweck der verschachtelten Transaktionen
- 30. Kann ich Savepoints zum Starten neuer Transaktionen in Oracle ersetzen?
Sie können jedoch zwei gleichzeitige Schreibtransaktionen haben, was das Problem verursacht. –
Wenn also eine Transaktion eine Schreiboperation für die Datenbank ausführt, können alle anderen Schreiboperationen die Datenbank nicht ändern, unabhängig davon, ob diese Operationen in einer Transaktion enthalten sind oder nicht. – user26404
Kann ich eine Auswahloperation ausführen, wenn eine andere Verbindung gleichzeitig eine Schreiboperation (Einfügen, Aktualisieren) ausführt? – user26404