Frage

Was ist die Syntax für einen Primärschlüssel angibt, auf mehr als 1 Spalte in SQLITE?

War es hilfreich?

Lösung

Nach der Dokumentation , es ist

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

Andere Tipps

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

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

Erstellen Sie eine Tabelle als solche:

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

Jetzt funktioniert dies ohne Warnung:

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

Basic:

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

Wenn Ihre Spalten sind Fremdschlüssel von anderen Tabellen (allgemeiner 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
);

Primärschlüsselfelder sollten nicht für nichtig erklärt werden (dies nicht Standard, da die Definition ist eines Primärschlüssels ist, dass sie eindeutig und nicht null sein muss). Aber unten ist eine gute Praxis für Alle mehrspaltigen Primärschlüssel in allen DBMS.

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

Der folgende Code erstellt eine Tabelle mit 2 Spalte als Primärschlüssel in SQLite.

LÖSUNG:

CREATE TABLE IF NOT EXISTS users (id TEXT NOT NULL, name TEXT NOT NULL, pet_name TEXT, PRIMARY KEY (id, name))

PRIMARY KEY (id, name) nicht für mich arbeiten. Hinzufügen einer Einschränkung hat der Job für mich.

CREATE TABLE IF NOT EXISTS customer (id INTEGER, name TEXT, user INTEGER, CONSTRAINT PK_CUSTOMER PRIMARY KEY (user, id))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top