Zusammenfassung :In diesem Tutorial lernen Sie, wie Sie PRIMARY KEY
von SQLite verwenden Einschränkung, um einen Primärschlüssel für eine Tabelle zu definieren.
Einführung in den SQLite-Primärschlüssel
Ein Primärschlüssel ist eine Spalte oder eine Gruppe von Spalten, die verwendet wird, um die Eindeutigkeit von Zeilen in einer Tabelle zu identifizieren. Jede Tabelle hat genau einen Primärschlüssel.
Mit SQLite können Sie den Primärschlüssel auf zwei Arten definieren:
Erstens, wenn der Primärschlüssel nur eine Spalte hat, verwenden Sie den PRIMARY KEY
Spaltenbeschränkung, um den Primärschlüssel wie folgt zu definieren:
CREATE TABLE table_name(
column_1 INTEGER NOT NULL PRIMARY KEY,
...
);
Code language: PHP (php)
Zweitens, falls der Primärschlüssel aus zwei oder mehr Spalten besteht, verwenden Sie den PRIMARY KEY
Tabelleneinschränkung, um die primäre wie in der folgenden Anweisung gezeigt zu definieren.
CREATE TABLE table_name(
column_1 INTEGER NOT NULL,
column_2 INTEGER NOT NULL,
...
PRIMARY KEY(column_1,column_2,...)
);
Code language: SQL (Structured Query Language) (sql)
Im SQL-Standard darf die Primärschlüsselspalte NULL
nicht enthalten Werte. Das bedeutet, dass die Primärschlüsselspalte einen impliziten NOT NULL
hat Einschränkung.
Um jedoch die aktuelle Version von SQLite mit der früheren Version kompatibel zu machen, lässt SQLite zu, dass die Primärschlüsselspalte NULL
enthält Werte.
SQLite-Primärschlüssel und Zeilen-ID-Tabelle
Wenn Sie eine Tabelle erstellen, ohne WITHOUT ROWID
anzugeben Option fügt SQLite eine implizite Spalte namens rowid
hinzu die 64-Bit-Ganzzahl mit Vorzeichen speichert. Die rowid
Spalte ist ein Schlüssel, der die Zeilen in der Tabelle eindeutig identifiziert. Tabellen mit rowid
Spalten heißen rowid
Tabellen.
Wenn eine Tabelle einen Primärschlüssel hat, der aus einer Spalte besteht, und diese Spalte als INTEGER
definiert ist dann wird diese Primärschlüsselspalte zu einem Alias für die rowid
Spalte.
Beachten Sie das, wenn Sie einen anderen ganzzahligen Typ wie BIGINT
zuweisen und UNSIGNED INT
zur Primärschlüsselspalte, diese Spalte wird kein Alias für die rowid
sein Spalte.
Da die rowid
Die Tabelle organisiert ihre Daten als B-Baum und fragt und sortiert Daten einer rowid
Tisch sind sehr schnell. Es ist schneller als die Verwendung eines Primärschlüssels, der kein Alias der rowid
ist .
Ein weiterer wichtiger Hinweis ist, dass wenn Sie eine Spalte mit dem INTEGER
deklarieren Typ und PRIMARY KEY DESC
-Klausel wird diese Spalte kein Alias für die rowid
Spalte:
CREATE TABLE table(
pk INTEGER PRIMARY KEY DESC,
...
);
Code language: SQL (Structured Query Language) (sql)
Beispiele für SQLite-Primärschlüssel erstellen
Die folgende Anweisung erstellt eine Tabelle mit dem Namen countries
die country_id
hat Spalte als Primärschlüssel.
CREATE TABLE countries (
country_id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
Denn der Primärschlüssel der countries
Tabelle nur eine Spalte hat, haben wir den Primärschlüssel mit PRIMARY KEY
definiert Spaltenbeschränkung.
Es ist möglich, den PRIMARY KEY
zu verwenden Tabelleneinschränkung, um den Primärschlüssel zu definieren, der aus einer Spalte besteht, wie in der folgenden Anweisung gezeigt:
CREATE TABLE languages (
language_id INTEGER,
name TEXT NOT NULL,
PRIMARY KEY (language_id)
);
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
Für Tabellen, deren Primärschlüssel aus mehr als einer Spalte bestehen, müssen Sie jedoch PRIMARY KEY
verwenden Tabelleneinschränkung zum Definieren von Primärschlüsseln.
Die folgende Anweisung erstellt die country_languages
Tabelle, deren Primärschlüssel aus zwei Spalten besteht.
CREATE TABLE country_languages (
country_id INTEGER NOT NULL,
language_id INTEGER NOT NULL,
PRIMARY KEY (country_id, language_id),
FOREIGN KEY (country_id) REFERENCES countries (country_id)
ON DELETE CASCADE ON UPDATE NO ACTION,
FOREIGN KEY (language_id) REFERENCES languages (language_id)
ON DELETE CASCADE ON UPDATE NO ACTION
);
Code language: PHP (php)
Probieren Sie es aus
Beispiel für das Hinzufügen eines SQLite-Primärschlüssels
Im Gegensatz zu anderen Datenbanksystemen, z. B. MySQL und PostgreSQL, können Sie ALTER TABLE
nicht verwenden -Anweisung zum Hinzufügen eines Primärschlüssels zu einer vorhandenen Tabelle.
Sie müssen die folgenden Schritte ausführen, um die Einschränkung zu umgehen:
- Deaktivieren Sie zuerst die Fremdschlüssel-Constarint-Prüfung.
- Als nächstes benennen Sie die Tabelle in einen anderen Tabellennamen um (old_table)
- Erstellen Sie dann eine neue Tabelle (Tabelle) mit exakter Struktur der Tabelle, die Sie umbenannt haben.
- Kopieren Sie danach Daten aus der old_table in die Tabelle.
- Schalten Sie zum Schluss die Fremdschlüssel-Einschränkungsprüfung ein
Siehe die folgenden Anweisungen:
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE table RENAME TO old_table;
-- define the primary key constraint here
CREATE TABLE table ( ... );
INSERT INTO table SELECT * FROM old_table;
COMMIT;
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
Die BEGIN TRANSACTION
startet eine neue Transaktion. Es stellt sicher, dass alle nachfolgenden Anweisungen erfolgreich oder gar nichts ausgeführt wird.
Das COMMIT
-Anweisung schreibt alle Anweisungen fest.
Lassen Sie uns einen Tabellennamen cities
erstellen ohne Primärschlüssel.
CREATE TABLE cities (
id INTEGER NOT NULL,
name text NOT NULL
);
INSERT INTO cities (id, name)
VALUES(1, 'San Jose');
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
Um den Primärschlüssel zu den cities
hinzuzufügen Tabelle führen Sie die folgenden Schritte aus:
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE cities RENAME TO old_cities;
CREATE TABLE cities (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL
);
INSERT INTO cities
SELECT * FROM old_cities;
DROP TABLE old_cities;
COMMIT;
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
Wenn Sie das SQLite-GUI-Tool verwenden, können Sie die folgende Anweisung verwenden, um die Informationen der Tabelle anzuzeigen.
PRAGMA table_info([cities]);
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
In diesem Tutorial haben Sie gelernt, den PRIMARY KEY
von SQLite zu verwenden Einschränkung, um den Primärschlüssel für eine Tabelle zu definieren.