2009-02-03 11 views
11

Ich benutze Sqlite mit Python 2.5. Ich bekomme einen SQL-Fehler mit der Syntax unten. Ich schaute mich um und sah AUTOINCREMENT auf dieser Seite http://www.sqlite.org/syntaxdiagrams.html#column-constraint, aber das hat auch nicht funktioniert. Ohne AUTO_INCREMENT kann meine Tabelle erstellt werden.AUTO_INCREMENT in sqlite Problem mit Python

An error occurred: near "AUTO_INCREMENT": syntax error 
CREATE TABLE fileInfo 
(
fileId int NOT NULL AUTO_INCREMENT, 
name varchar(255), 
status int NOT NULL, 
PRIMARY KEY (fileId) 
); 

Antwort

38

Dies ist in der SQLite FAQ adressiert. Question #1.

in dem es heißt:

Wie erstelle ich ein AUTOINCREMENT Feld?

Kurze Antwort: Eine Spalte mit der Bezeichnung INTEGER PRIMARY KEY wird autoincrement. Hier

ist die lange Antwort: Wenn Sie eine Spalte einer Tabelle deklarieren INTEGER PRIMARY KEY sein, dann, wenn Sie eine NULL in die Spalte der Tabelle einfügen , die NULL automatisch in eine ganze Zahl umgewandelt wird Das ist eine größer als der größte Wert dieser Spalte über alle anderen Zeilen in der Tabelle, oder 1, wenn die Tabelle leer ist. (. Wenn der größtmögliche Integer-Schlüssel, 9223372036854775807, dann ein nicht benutzter Schlüsselwert zufällig ausgewählt wird) Für Beispiel: Angenommen, Sie haben eine Tabelle wie dieses:

CREATE TABLE t1( a INTEGER PRIMARY KEY, b INTEGER); Mit dieser Tabelle der

Aussage

INSERT INTO t1 VALUES(NULL,123); ist logisch äquivalent zu der Aussage:

INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); Es ist eine Funktion mit dem Namen , die den Integerschlüssel für die letzte Einfügeoperation zurückgibt.

Beachten Sie, dass der Integerschlüssel größer als der größte Schlüssel ist, der in der Tabelle unmittelbar vor dem Einfügen war. Der neue Schlüssel ist einmalig für alle Schlüssel, die derzeit in der Tabelle vorhanden sind, aber er könnte sich mit Schlüsseln überschneiden, die zuvor in der Tabelle gelöscht wurden. Um Schlüssel zu erstellen, die über die Lebensdauer der Tabelle eindeutig sind, fügen Sie das Schlüsselwort AUTOINCREMENT zur INTEGER PRIMARY KEY-Deklaration hinzu. Dann wird der Schlüssel einer mehr sein als als der größte Schlüssel, der jemals in diese Tabelle existiert hat. Wenn der maximal mögliche Schlüssel zuvor in dieser Tabelle vorhanden war, schlägt das INSERT mit einen SQLITE_FULL-Fehlercode fehl.

+3

versuchen könnte ich diese Art von Antworten mögen. Du solltest es auf RTFM komprimieren :) – lmsasu

5

sehen Sie sich

CREATE TABLE fileInfo 
(
fileid INTEGER PRIMARY KEY AUTOINCREMENT, 
name STRING, 
status INTEGER NOT NULL 
);