2017-05-01 1 views
0

Wenn ich den folgenden Befehl meinem Tisch in SQLite3 schaffen es nicht Autoinkrement ID auch nicht NUTZERNAME machen ein Primärschlüssel, wie ich mehrere Benutzer mit demselben Benutzernamen eingeben und es wird ihnen Eingang ohne Probleme .SQLite nicht automatisch erhöht wird

Befehl:

CREATE TABLE 'users' (
    'id' INTEGER AUTO INCREMENT, 
    'username' TEXT NOT NULL, 
    'hash' TEXT, 
    PRIMARY KEY ('id', 'username') 
); 

Hier eine Ausgabe von einer Konsole ist, zu zeigen, was es tut, wie Sie können es mir sagen, lassen Sie den Benutzernamen Katze zweimal eingeben und einen Wert ID nicht zuweisen, wie es sollte haben nach Autoinkrement:

sqlite> CREATE TABLE 'users' ('id' INTEGER AUTO INCREMENT, 'username' TEXT NOT NULL, 'hash' TEXT, PRIMARY KEY ('id', 'username')); 

sqlite> insert into users (username, hash) values ('cat', 'dog2'); 

sqlite> insert into users (username, hash) values ('cat', 'dog2'); 

sqlite> select * from users;                                  
id   username hash  
---------- ---------- ---------- 

      cat   dog2  
      cat   dog2  
+1

Ich bin nicht sicher, wie SQLite Auto Inkrementieren Griffe, aber 'PRIMARY KEY (id, username)' sollte genau das bedeuten, die ID und Benutzernamen machen zusammen die PK; Wenn Sie möchten, dass der Benutzername eindeutig ist, benötigen Sie eine separate UNIQUE-Einschränkung/Schlüssel für genau dieses Feld. – Uueerdo

Antwort

1

Es ist AUTOINCREMENT, nicht AUTO INCREMENT. Auch, wenn das Feld in der SQLite-Tabelle, die das AUTOINCREMENT Attribut hat, soll es auch PRIMARY KEY.

CREATE TABLE 'users' (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, hash TEXT); 

Sie können das Feld mit AUTOINCREMENT Attribute als Teil der Verbindung Schlüssel verwenden.

Verwandte Themen