In T-SQL (MS SQL Server) verwenden Sie die IDENTITY property:
"IDENTITY [(Samen, erhöht)]
Samen Ist Wert, der für die erste in die Tabelle geladene Zeile verwendet wird
Inkrement Der inkrementelle Wert, der dem Identitätswert der vorherigen geladenen Zeile hinzugefügt wird. "
Eine Sache, die Sie wirklich nicht tun sollte, ist zu versuchen und Ihre eigene Rolle, wenn Sie wirklich wissen, was Sie tun und Gleichzeitigkeit umgehen kann usw.
Edit: Warum Sie müssen vorsichtig sein:
Hier einige Pseudo-SQL, die die Gefahr mit Ihrem eigenen Schritt usw. zeigt:
1. @NextID = SELECT MAX(ID) FROM MyTable;
2. INSERT INTO MyTable(ID + 1, Name) VALUES (@NextID, "Dan");
, nun in den meisten Fällen würde dies OK arbeiten. In einer Datenbank mit hohem Volumen besteht jedoch immer die Möglichkeit, dass zwischen den Schritten 1 und 2 eine andere INSERT-Anweisung auftritt. Sie würden dann mit einer Primärschlüsselverletzung und einem Fehler enden. Es passiert vielleicht nicht oft, aber wenn es passiert, wäre es ein Schmerz, genau zu bestimmen.
Der Weg dahin ist, vor Schritt 1 ein LOCK zu haben und es nach Schritt 2 freizugeben. Dies stellt effektiv alle Transaktionen in eine Warteschlange und die Datenbank läuft im "Einzelbenutzer" -Modus. In Systemen mit hohem Volumen kann dies für die Leistung sehr nachteilig sein.
Aus diesem Grund haben alle wichtigen Datenbanken Sequenzen oder integrierte Methoden zum automatischen Inkrementieren von Primärschlüsseln.
Eine Zufallszahl wäre nicht sehr gut, da der Primärschlüssel eindeutig sein sollte! –
Technisch gesehen kann "auto-increment" nur x + n sein (wobei n in diesem Zusammenhang normalerweise 1 ist). Vermutlich meinst du Strategien zur Generierung der nächsten ID. – Draemon
@Dreamon, sagte es besser als ich konnte. Ich werde die Frage aktualisieren. Vielen Dank. –