747 Stimmen

Sqlite Primärschlüssel für mehrere Spalten

Wie lautet die Syntax für die Angabe eines Primärschlüssels für mehr als 1 Spalte in SQLITE?

22 Stimmen

Dies wird auch als zusammengesetzter Schlüssel bezeichnet de.wikipedia.org/wiki/Verbindungsschlüssel

14 Stimmen

@OneWorld Oder zusammengesetzter Schlüssel, wenn eine der Spalten nicht selbst ein Schlüssel ist.

983voto

Brian Campbell Punkte 304982

Nach Angaben der Dokumentation ist es

CREATE TABLE something (
  column1, 
  column2, 
  column3, 
  PRIMARY KEY (column1, column2)
);

189voto

xiwok Punkte 1779
CREATE TABLE something (
  column1 INTEGER NOT NULL,
  column2 INTEGER NOT NULL,
  value,
  PRIMARY KEY ( column1, column2)
);

53voto

jsmarkus Punkte 1424

Ja. Aber denken Sie daran, dass solche Primärschlüssel die NULL Werte in beiden Spalten mehrfach.

Erstellen Sie eine Tabelle als solche:

    sqlite> CREATE TABLE something (
column1, column2, value, PRIMARY KEY (column1, column2));

Jetzt funktioniert das ohne jede Vorwarnung:

sqlite> insert into something (value) VALUES ('bla-bla');
sqlite> insert into something (value) VALUES ('bla-bla');
sqlite> select * from something;
NULL|NULL|bla-bla
NULL|NULL|bla-bla

45voto

compte14031879 Punkte 1411

Basic :

CREATE TABLE table1 (
    columnA INTEGER NOT NULL,
    columnB INTEGER NOT NULL,
    PRIMARY KEY (columnA, columnB)
);

Wenn Ihre Spalten Fremdschlüssel von anderen Tabellen sind (häufiger Fall):

CREATE TABLE table1 (
    table2_id INTEGER NOT NULL,
    table3_id INTEGER NOT NULL,
    FOREIGN KEY (table2_id) REFERENCES table2(id),
    FOREIGN KEY (table3_id) REFERENCES table3(id),
    PRIMARY KEY (table2_id, table3_id)
);

CREATE TABLE table2 (
    id INTEGER NOT NULL,
    PRIMARY KEY id
);

CREATE TABLE table3 (
    id INTEGER NOT NULL,
    PRIMARY KEY id
);

17voto

Ken Reed Punkte 161

Primärschlüsselfelder sollten als nicht null deklariert werden (dies ist kein Standard, da die Definition eines Primärschlüssels ist, dass er eindeutig und nicht null sein muss). Aber unten ist eine gute Praxis für alle mehrspaltigen Primärschlüssel in jedem DBMS.

create table foo
(
  fooint integer not null
  ,foobar string not null
  ,fooval real
  ,primary key (fooint, foobar)
)
;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X