SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Klucz podstawowy SQLite

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:

  1. Najpierw wyłącz zaznaczenie constarint klucza obcego.
  2. Następnie zmień nazwę tabeli na inną nazwę tabeli (stara_tabela)
  3. Następnie utwórz nową tabelę (tablicę) z dokładną strukturą tabeli, której nazwa została zmieniona.
  4. Następnie skopiuj dane ze starej_tabeli do tabeli.
  5. 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy są jakieś metody, które pomagają w rozwiązywaniu typowych problemów z SQLite?

  2. Otwieranie bazy danych Android Sqlite we fragmencie

  3. Jak iif() działa w SQLite

  4. SQLiteDatabase android IllegalStateException

  5. IllegalStateException:baza danych już zamknięta (przy użyciu ViewPager)