Thiemos Archiv
- Tuesday, 2004-03-23 12:37
- Für fortlaufende Primärschlüssel kennt MySQL
AUTO_INCREMENTals "column constraint" (Nebenbedingung). PostgreSQL kenntSERIALals Datentyp. Der SQL-Standard siehtCREATE SEQUENCE sequencenameundDEFAULT NEXVAL(sequencename)vor, wiederum als "column constraint". Und SQLite? Das tanzt völlig aus der Reihe. Wenn eine Spalte alsINTEGER PRIMARY KEYdefiniert wurde und sie beimINSERTkeinen 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ächstenINSERTnoch 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.