Thiemos Archiv
- Tuesday, 2004-03-23 12:37
- Für fortlaufende Primärschlüssel kennt MySQL
AUTO_INCREMENT
als "column constraint" (Nebenbedingung). PostgreSQL kenntSERIAL
als Datentyp. Der SQL-Standard siehtCREATE SEQUENCE sequencename
undDEFAULT NEXVAL(sequencename)
vor, wiederum als "column constraint". Und SQLite? Das tanzt völlig aus der Reihe. Wenn eine Spalte alsINTEGER PRIMARY KEY
definiert wurde und sie beimINSERT
keinen Wert zugewiesen bekommt, wird sie hochgezählt.
Allerdings nicht basierend auf einer Sequenz wie bei allen anderen genannten Varianten (auch MySQL hält intern eine Sequenz), sondern basierend auf dem momentan höchsten Wert der Spalte. Der Unterschied wird deutlich, wenn man eine Zeile einfügt und sofort wieder löscht. Die dafür vergebene Nummer ist nirgends notiert und wird beim nächstenINSERT
noch einmal vergeben.
Zum Spielen ist SQLite trotzdem super.
(Außerdem macht das meine CSV-Datenbankklasse genauso.) Kommentare zu diesem Beitrag können per E-Mail an den Autor gesandt werden.