sql >> Databáze >  >> RDS >> SQLite

Primární klíč SQLite

Shrnutí :v tomto tutoriálu se naučíte používat SQLite PRIMARY KEY omezení definovat primární klíč pro tabulku.

Úvod do primárního klíče SQLite

Primární klíč je sloupec nebo skupina sloupců používaných k identifikaci jedinečnosti řádků v tabulce. Každá tabulka má jeden a pouze jeden primární klíč.

SQLite umožňuje definovat primární klíč dvěma způsoby:

Za prvé, pokud má primární klíč pouze jeden sloupec, použijete PRIMARY KEY omezení sloupce k definování primárního klíče takto:

CREATE TABLE table_name(
   column_1 INTEGER NOT NULL PRIMARY KEY,
   ...
);Code language: PHP (php)

Za druhé, v případě, že se primární klíč skládá ze dvou nebo více sloupců, použijete PRIMARY KEY omezení tabulky k definování primární, jak je znázorněno v následujícím prohlášení.

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)

Ve standardu SQL nesmí sloupec primárního klíče obsahovat NULL hodnoty. To znamená, že sloupec primárního klíče má implicitní NOT NULL omezení.

Aby však byla aktuální verze SQLite kompatibilní s předchozí verzí, SQLite umožňuje, aby sloupec primárního klíče obsahoval NULL hodnoty.

Primární klíč SQLite a tabulka rowid

Když vytvoříte tabulku bez určení WITHOUT ROWID SQLite přidá implicitní sloupec nazvaný rowid který ukládá 64bitové celé číslo se znaménkem. rowid sloupec je klíč, který jednoznačně identifikuje řádky v tabulce. Tabulky, které mají rowid sloupce se nazývají rowid tabulky.

Pokud má tabulka primární klíč, který se skládá z jednoho sloupce a tento sloupec je definován jako INTEGER pak se tento sloupec primárního klíče stane aliasem pro rowid sloupec.

Všimněte si, že pokud přiřadíte jiný typ celého čísla, například BIGINT a UNSIGNED INT do sloupce primárního klíče, tento sloupec nebude aliasem pro rowid sloupec.

Protože rowid tabulka organizuje svá data jako B-strom, dotazuje se a třídí data rowid stoly jsou velmi rychlé. Je to rychlejší než použití primárního klíče, který není aliasem rowid .

Další důležitá poznámka je, že pokud deklarujete sloupec s INTEGER zadejte a PRIMARY KEY DESC klauzule, tento sloupec se nestane aliasem pro rowid sloupec:

CREATE TABLE table(
   pk INTEGER PRIMARY KEY DESC,
   ...
);Code language: SQL (Structured Query Language) (sql)

Vytvoření příkladů primárního klíče SQLite

Následující příkaz vytvoří tabulku s názvem countries který má country_id sloupec jako primární klíč.

CREATE TABLE countries (
   country_id INTEGER PRIMARY KEY,
   name TEXT NOT NULL
);Code language: SQL (Structured Query Language) (sql)

Zkuste to

Protože primární klíč countries tabulka má pouze jeden sloupec, primární klíč jsme definovali pomocí PRIMARY KEY omezení sloupců.

Je možné použít PRIMARY KEY omezení tabulky k definování primárního klíče, který se skládá z jednoho sloupce, jak je znázorněno v následujícím prohlášení:

CREATE TABLE languages (
   language_id INTEGER,
   name TEXT NOT NULL,
   PRIMARY KEY (language_id)
);Code language: SQL (Structured Query Language) (sql)

Zkuste to

Pro tabulky, jejichž primární klíče se skládají z více než jednoho sloupce, však musíte použít PRIMARY KEY omezení tabulky pro definování primárních klíčů.

Následující příkaz vytváří country_languages tabulka, jejíž primární klíč se skládá ze dvou sloupců.

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)

Zkuste to

Přidání příkladu primárního klíče SQLite

Na rozdíl od jiných databázových systémů, např. MySQL a PostgreSQL, nemůžete použít ALTER TABLE pro přidání primárního klíče do existující tabulky.

Chcete-li obejít omezení, musíte provést následující kroky:

  1. Nejprve vypněte zaškrtnutí omezení cizího klíče.
  2. Poté přejmenujte tabulku na jiný název tabulky (old_table)
  3. Poté vytvořte novou tabulku (tabulku) s přesnou strukturou tabulky, kterou jste přejmenovali.
  4. Poté zkopírujte data z old_table do tabulky.
  5. Nakonec zapněte kontrolu omezení cizího klíče

Viz následující prohlášení:

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)

Zkuste to

BEGIN TRANSACTION zahájí novou transakci. Zajišťuje, že se všechny následující příkazy provedou úspěšně nebo se neprovede vůbec nic.

COMMIT příkaz potvrdí všechny příkazy.

Vytvořme název tabulky cities bez primárního klíče.

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)

Zkuste to

Chcete-li přidat primární klíč do cities tabulky, provedete následující kroky:

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)

Zkuste to

Pokud používáte nástroj GUI SQLite, můžete k zobrazení informací v tabulce použít následující příkaz.

PRAGMA table_info([cities]);Code language: SQL (Structured Query Language) (sql)

Zkuste to

V tomto tutoriálu jste se naučili používat SQLite PRIMARY KEY omezení pro definování primárního klíče pro tabulku.


  1. Django cache.set() způsobuje chybu duplicitního klíče

  2. Oprava „Konverze se nezdařila při převodu hodnoty varchar“ při pokusu o zřetězení v SQL Server

  3. Jak načítat a spravovat data v rámci Microsoft Power BI

  4. Co je nového v MySQL Galera Cluster 4.0