Ich füge eine Reihe von Datensätzen (zB 100) pro einzelne Transaktion. Ich möchte, dass jeder Datensatz ein "Transaktions-ID" -Feld hat, das für jede neue Transaktion erhöht wird und für jeden Datensatz, der innerhalb einer bestimmten Transaktion eingefügt wird, derselbe Wert ist. Ich möchte dies, damit Clients eine Abfrage ausführen können und dann irgendwann die gleiche Abfrage ausführen, aber nur Datensätze mit einer neueren Transaktions-ID abrufen. Was ist der beste Weg, es zu tun? Ich möchte die ID nicht wirklich auf Anwendungsebene generieren, da auf die DB von mehreren Prozessen zugegriffen wird, so dass ich dann die ID-Zuweisung prozessübergreifend koordinieren müsste. Oder ich könnte eine dedizierte TXID-Tabelle mit einer einzelnen Autoincrememt-Spalte haben, einfügen, bevor Sie die Transaktion starten und die letzte_insert_rowid() als TXID verwenden, aber es scheint ein wenig ineffizient zu sein, eine Tabelle mit inkrementierenden Zahlen zu speichern, nur um IDs zu generieren. Irgendwelche Gedanken? Vielen Dank.sqlite: Erzeuge eine Transaktions-ID für Multi-Einfüge-Transaktion
Antwort
Wenn Sie eine inkrementierende Ganzzahl wünschen, sollten Sie tatsächlich das tun, was Sie vorgeschlagen haben - eine andere Tabelle, die Transaktions-IDs enthält. Sie können diese Tabelle ziemlich regelmäßig durchstreichen, um die Zeilen zu löschen, obwohl sie sehr klein und effizient sind, so dass dies kein großes Problem sein sollte.
Es gibt eine Vielzahl von anderen möglichen Lösungen, aber wie Sie bereits herausgefunden haben, funktionieren die meisten von ihnen nicht in Ihrer Situation (Möglichkeit von Kollisionen, abhängig von Ihrer erforderlichen Treue). Wenn Sie die Datenbank nutzen müssen, um Eindeutigkeit zu gewährleisten, ist dies die einzige Möglichkeit, dies in SQLite zu tun. Alternativ könnten Sie etwas wie die random
oder randomblob
functions versuchen, aber es gibt natürlich keine Eindeutigkeit Garantien für die PRG gemacht.
Wenn Sie das tun nicht eine monoton steigende integer benötigen, könnten Sie auch eine RFC 4122 UUID auf der Anwendungsebene erzeugen (diese können immer noch Konflikte, jedoch selten, wenn Sie aus vielen Prozessen schreiben - Sie möchten vielleicht auch markieren es mit einem prozessspezifischen String und machen es zu einem URN, etwa wie urn:uuid:<tag>+<uuid>
). Wenn sich alle Schreiber auf demselben Computer befinden, reicht die Verwendung von etwas wie pid
für ein Tag aus, um die Eindeutigkeit zu garantieren.
- 1. Wie erzeuge ich eine Filterzeichenfolge für JSON?
- 2. Erzeuge Daten für Junit automatisch
- 3. Wie erzeuge ich eine Sitemap für dynamische Links in expressjs?
- 4. Wie erzeuge ich Modelle für eine bestehende Datenbank in Django?
- 5. Erzeuge CREATE-Skripte für eine Liste von Indizes
- 6. Erzeuge Header-Datei (* .h) für eine gemeinsame Bibliotheksdatei (* .so)
- 7. Erzeuge UIButton
- 8. Erzeuge eine eindeutige Zeichenfolge in Python/Django
- 9. Google Erzeuge Bearer Token für den Browser
- 10. ist dies eine vernünftige Ziellast für SQLite?
- 11. Parameterersetzung für eine SQLite "IN" -Klausel
- 12. Gibt es eine erweiterte Funktionsbibliothek für SQLite?
- 13. Wie erzeuge ich eine alternierende Reichweite?
- 14. Wie erzeuge ich eine JDBC-Datenbank-URL?
- 15. Wie erzeuge ich API-Dokumentation für SignalR
- 16. Erzeuge Embed Code für Bilder in WordPress
- 17. Wie erzeuge ich Spezifikationen für vorhandene Controller?
- 18. Wie erzeuge ich RDOC für (alle) Rails?
- 19. django Erzeuge Zugangstoken für api Anruf
- 20. Erzeuge eine HTTP-Antwort in Ruby
- 21. Javascript - Erzeuge eine Seriennummer, mit Checker
- 22. Wie erzeuge ich Zufallsidenticons?
- 23. SubSonic-Verbindungszeichenfolge für SQLite
- 24. Installieren SQLite für php5.6
- 25. Optimierungstechniken für SQLite-Datenbank
- 26. SQLite für große Datenmengen?
- 27. SQLite Alternativen für C++
- 28. SAS - Erzeuge Variablennamen korrekt
- 29. SQLite über eine Netzwerkfreigabe
- 30. SQLite für Scala
Danke für die Antwort. Ich dachte über UUID nach, aber ich muss sicherstellen, dass jede neue ID größer als die letzte ist. Wird die TXID-Tabellenlösung tun. – gimmeamilk