Ich habe eine sqlite Tisch (sqlite Version 3.7.3), wo Nullen in die Primärschlüsselspalte eingeführt werden in unerwünschter Weise automatisch inkrementiert:verhindern autoinkrementierenden ganzzahligen Primärschlüssel?
sqlite> CREATE TABLE foo(bar INTEGER NOT NULL PRIMARY KEY);
sqlite> INSERT INTO foo(bar) VALUES(NULL);
sqlite> SELECT * FROM foo;
1
Im sqlite docs, es zeigt, dass die Zugabe von AUTOINCREMENT
Schlüsselwort an die Säule soll dieses Verhalten erstellen, aber es scheint kein Schlüsselwort verhindert die automatische Inkrementierung zu sein ...
ich fand auch, dass ich sQLite mit den SQLITE_OMIT_AUTOINCREMENT
compile option, bauen kann, aber ich will nicht deaktivieren das Verhalten global, nur für diese spezielle Spalte.
Interessanterweise, wenn ich die PRIMARY KEY
Einschränkung nicht enthalten, erhalte ich das gewünschte Verhalten:
sqlite> CREATE TABLE FOO(bar integer NOT NULL);
sqlite> INSERT INTO FOO(bar) VALUES(NULL);
SQL error: foo.bar may not be NULL
Wie kann ich die Tabelle definieren, so dass NULL-Werte werden verworfen und halten die Primärschlüsselbedingung?
wow, genau dort in der Dokumentation ...: D –
Sie möchten wahrscheinlich auch die UNIQUE mit NOT NULL kombinieren, um die Erstellung von "idless" Datensätzen in Ihrer Tabelle zu verhindern. – Timo