Podsumowanie :w tym samouczku dowiesz się, jak używać SQLite PRIMARY KEY
ograniczenie do zdefiniowania klucza podstawowego dla tabeli.
Wprowadzenie do klucza podstawowego SQLite
Klucz podstawowy to kolumna lub grupa kolumn używana do identyfikowania niepowtarzalności wierszy w tabeli. Każda tabela ma jeden i tylko jeden klucz podstawowy.
SQLite pozwala zdefiniować klucz podstawowy na dwa sposoby:
Po pierwsze, jeśli klucz podstawowy ma tylko jedną kolumnę, użyj PRIMARY KEY
ograniczenie kolumny, aby zdefiniować klucz podstawowy w następujący sposób:
CREATE TABLE table_name(
column_1 INTEGER NOT NULL PRIMARY KEY,
...
);
Code language: PHP (php)
Po drugie, jeśli klucz podstawowy składa się z dwóch lub więcej kolumn, użyj PRIMARY KEY
ograniczenie tabeli do zdefiniowania podstawowego, jak pokazano w poniższym oświadczeniu.
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)
W standardzie SQL kolumna klucza podstawowego nie może zawierać NULL
wartości. Oznacza to, że kolumna klucza głównego ma niejawny NOT NULL
ograniczenie.
Jednak, aby bieżąca wersja SQLite była kompatybilna z wcześniejszą wersją, SQLite pozwala, aby kolumna klucza podstawowego zawierała NULL
wartości.
Klucz podstawowy SQLite i tabela wierszy
Gdy tworzysz tabelę bez określenia WITHOUT ROWID
opcja, SQLite dodaje niejawną kolumnę o nazwie rowid
który przechowuje 64-bitową liczbę całkowitą ze znakiem. rowid
kolumna to klucz, który jednoznacznie identyfikuje wiersze w tabeli. Tabele, które mają rowid
kolumny nazywają się rowid
tabele.
Jeśli tabela ma klucz podstawowy, który składa się z jednej kolumny, a ta kolumna jest zdefiniowana jako INTEGER
wtedy ta kolumna klucza podstawowego staje się aliasem dla rowid
kolumna.
Zauważ, że jeśli przypiszesz inny typ liczby całkowitej, taki jak BIGINT
i UNSIGNED INT
do kolumny klucza podstawowego, ta kolumna nie będzie aliasem dla rowid
kolumna.
Ponieważ rowid
tabela organizuje swoje dane jako B-drzewo, wysyła zapytania i sortuje dane rowid
stół są bardzo szybkie. Jest szybszy niż użycie klucza podstawowego, który nie jest aliasem rowid
.
Inną ważną uwagą jest to, że jeśli zadeklarujesz kolumnę z INTEGER
wpisz i PRIMARY KEY DESC
klauzula, ta kolumna nie stanie się aliasem dla rowid
kolumna:
CREATE TABLE table(
pk INTEGER PRIMARY KEY DESC,
...
);
Code language: SQL (Structured Query Language) (sql)
Tworzenie przykładów klucza podstawowego SQLite
Poniższa instrukcja tworzy tabelę o nazwie countries
który ma country_id
kolumna jako klucz podstawowy.
CREATE TABLE countries (
country_id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Ponieważ klucz podstawowy countries
tabela ma tylko jedną kolumnę, klucz główny zdefiniowaliśmy za pomocą PRIMARY KEY
ograniczenie kolumny.
Możliwe jest użycie PRIMARY KEY
ograniczenie tabeli, aby zdefiniować klucz podstawowy, który składa się z jednej kolumny, jak pokazano w poniższej instrukcji:
CREATE TABLE languages (
language_id INTEGER,
name TEXT NOT NULL,
PRIMARY KEY (language_id)
);
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Jednak w przypadku tabel, w których klucze podstawowe składają się z więcej niż jednej kolumny, należy użyć PRIMARY KEY
ograniczenie tabeli do zdefiniowania kluczy podstawowych.
Poniższa instrukcja tworzy country_languages
tabela, której klucz podstawowy składa się z dwóch kolumn.
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)
Wypróbuj
Przykład dodawania klucza podstawowego SQLite
W przeciwieństwie do innych systemów baz danych, np. MySQL i PostgreSQL, nie możesz użyć ALTER TABLE
oświadczenie, aby dodać klucz podstawowy do istniejącej tabeli.
Aby obejść ograniczenie, należy wykonać następujące czynności:
- Najpierw wyłącz zaznaczenie constarint klucza obcego.
- Następnie zmień nazwę tabeli na inną nazwę tabeli (stara_tabela)
- Następnie utwórz nową tabelę (tablicę) z dokładną strukturą tabeli, której nazwa została zmieniona.
- Następnie skopiuj dane ze starej_tabeli do tabeli.
- Na koniec włącz sprawdzanie ograniczenia klucza obcego
Zobacz następujące stwierdzenia:
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)
Wypróbuj
BEGIN TRANSACTION
rozpoczyna nową transakcję. Zapewnia to, że wszystkie kolejne instrukcje zostaną wykonane pomyślnie lub nic nie zostanie wykonane.
COMMIT
oświadczenie potwierdza wszystkie oświadczenia.
Stwórzmy nazwę tabeli cities
bez klucza podstawowego.
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)
Wypróbuj
Aby dodać klucz podstawowy do cities
tabeli, wykonaj następujące czynności:
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)
Wypróbuj
Jeśli używasz narzędzia SQLite GUI, możesz użyć poniższej instrukcji, aby wyświetlić informacje w tabeli.
PRAGMA table_info([cities]);
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
W tym samouczku nauczyłeś się korzystać z SQLite PRIMARY KEY
ograniczenie do zdefiniowania klucza podstawowego dla tabeli.