Kann ich einen eindeutigen ZEITSTEMPEL für jeden Datensatz in MySQL
Gibt es eine Möglichkeit, sich einen eindeutigen timestamp-Wert für jeden Datensatz in MySQL??..
Erstellte ich eine Beispiel-Tabelle
CREATE TABLE t1 (id int primary key, name varchar(50),
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
und lief einige Beispiele für INSERTIONEN und scheint zu sein, timestamp-Werte werden verdoppelt.
e.g insert into t1(id,name) values(1,"test");
- Es sei denn, Sie verhindern, dass Datensätze aus eingefügt werden können, zur gleichen Zeit, kann es doppelten Zeitstempel.
- Kann ich nicht erhöhen, die "TIMESTAMP-kennschalldruck"??.. mit Millisekunden etc? Marcus, Nur Mit einer Select-Abfrage. durch bloßem Auge kann ich ihn sehen.
- MySQL unterstützt keine Mikrosekunden (aber 5.6.4 wird), so würde ich vorschlagen, gehen mit einem integer-Feld.
- Sie bedeuten, nur mit einem Integer-Feld und halten Sie die Inkrementierung der?.. Wie kann ich zurechtkommen mit einem update??.. Finden der größte ganzzahlige Wert, und fügen Sie ein?
- Was über Ihren Fall ist nicht gelöst durch eine auto-increment primary key?
- dann wird es ein problem für updates???? Bin ich richtig??.. Wenn ein Feld aktualisiert wird-Inkrement-Wert wird sich nicht ändern, ich möchte ermitteln der Reihenfolge, in der Datensätze haben sich geändert.
- eine einfachere Lösung wäre die Verwendung von PHP microtime () - Funktion php.net/manual/en/function.microtime.php
- Meine Anwendung ist in java. sorry, ich vergaß zu erwähnen, dass 🙁
- Ich bin nicht vertraut mit Java, aber ich ziemlich sicher, dass es bietet eine ähnliche Methode, die Systeme mit " Mikro - /nano-Zeit
- Meinst du das system mal mit java-code und speichern Sie es, andere als die Verwendung von TIMESTAMP in MySQL. Das ist eine gute Idee und ich werde in der Lage sein, um einen eindeutigen Wert.Danke für den tollen Tipp. Leider kann ich nicht voten Sie.. :(.. wirklich zu schätzen Ihre Hilfe.:)
- froh, ich könnte behilflich sein 🙂
InformationsquelleAutor NULL_USER | 2012-04-25
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bald (5.6.4), MySQL bieten Sekundenbruchteile in TIMESTAMP-Spalten, jedoch auch in Bruchteilen von Sekunden nicht garantiert einzigartig zu sein, obwohl Sie theoretisch würden die meisten oft eindeutig sein, vor allem, wenn Sie beschränkt MySQL in einem einzigen thread.
Können Sie eine UUID, wenn Sie müssen eine eindeutige Nummer, die bestellten zeitlich.
SELECT UUID()
liefert etwas wie:Und einige Zeit später:
Die ersten drei Teile einer UUID aus der Zeit, jedoch, Sie sind in der Reihenfolge von der höchsten Präzision zu mindestens, so würden Sie umkehren müssen, die ersten drei Teile mit
SUBSTR()
undCONCAT()
wie diese:Ergibt:
Du offensichtlich nicht nutzen konnten, eine Funktion wie diese als default-Wert, so dass Sie würde haben, um es im code, aber es ist garantiert ein einzigartiges zeitlich geordnete Wert. UUID() arbeitet auf einer viel tieferen Ebene als ein paar Sekunden (clock cycles), also ist es garantiert einzigartig mit jedem Anruf und hat niedrige overhead (keine Verriegelung wie auto_increment).
Verwenden Sie die UUID() der Datenbank-server kann vorgezogen werden, indem eine ähnliche Funktion, wie der PHP -
microtime()
- Funktion auf dem application server, weil Ihr Datenbank-server mehr zentralisiert. Sie können mehr als eine Anwendung (web -) server, die möglicherweise generieren kollidierenden Werte und microtime() immer noch nicht für eindeutige Werte.UUID
werden immer verwendet (nur die ersten drei Werte Umgekehrt für die Bestellung)? Wo finden Sie weitere Informationen zu dieser Funktion. Handbuch nicht erwähnt, dass die "höchste Präzision, um zumindest" um?Ja, wenn Sie nicht zwei oder mehr Beilagen oder änderungen während einer Sekunde. Problem ist nur, dass eine Menge getan werden kann, während eine zweite, d.h. mehrere Einfügungen oder automatische updates mit einem
where
- Klausel. Dass Regeln, die einfache Lösung zu zwingen, eindeutige Zeitstempel: hinzufügenunique
Einschränkung intimestamp
Spalte.Warum sollte ein
timestamp
eindeutig sein? Verwendenauto increment
oder etwas anderes, wenn Sie brauchen, eindeutigen index etc.Wenn du mehr brauchst die genaue Zeit-Werte als
timestamp
finden Sie unter:double(13,3)
macht es möglich, microtime in die DB.)int
multipliziert mit 100 oder 1000 könnte auch funktionieren. Hierdecimal
ist bevorzugt überdouble
.)AI
reweals der Bestellung. Aber die Bearbeitung ist eine andere Geschichte. Warum Bearbeiten, um Fragen zu klären? Ich glaube, die wichtigste Funktion dertimestamp
ist, um die Zeit zu markieren, wenn änderungen in einer Zeile, so dass Sie wissen, dass die Zeile nicht geändert, nach dem einfügen. Nicht zu offenbaren, die Reihenfolge der änderungen. Speichernmicrotime
in eine Spalte eine Antwort sein könnte, aber ich glaube nicht, dass es keine Garantie dafür, dass auch dieser Wert ist immer eindeutig. Sie konnte einfügendate
odertimestamp
+ irgendeine Art von count-Wert des aktuellen Datums-änderungen. Aber dann wieder, wie um zu verfolgen, welche änderungen?