SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Chave Primária SQLite


Resumo :neste tutorial, você aprenderá como usar SQLite PRIMARY KEY restrição para definir uma chave primária para uma tabela.

Introdução à chave primária SQLite


Uma chave primária é uma coluna ou grupo de colunas usada para identificar a exclusividade das linhas em uma tabela. Cada tabela tem uma e apenas uma chave primária.

O SQLite permite definir a chave primária de duas maneiras:

Primeiro, se a chave primária tiver apenas uma coluna, você usa a PRIMARY KEY restrição de coluna para definir a chave primária da seguinte forma:
CREATE TABLE table_name(
   column_1 INTEGER NOT NULL PRIMARY KEY,
   ...
);Code language: PHP (php)

Segundo, caso a chave primária consista em duas ou mais colunas, você usa a PRIMARY KEY table para definir o primário, conforme mostrado na instrução a seguir.
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)

No padrão SQL, a coluna de chave primária não deve conter NULL valores. Isso significa que a coluna de chave primária tem um NOT NULL implícito limitação.

No entanto, para tornar a versão atual do SQLite compatível com a versão anterior, o SQLite permite que a coluna de chave primária contenha NULL valores.

Chave primária SQLite e tabela rowid


Quando você cria uma tabela sem especificar o WITHOUT ROWID opção, o SQLite adiciona uma coluna implícita chamada rowid que armazena um inteiro assinado de 64 bits. O rowid coluna é uma chave que identifica exclusivamente as linhas na tabela. Tabelas que têm rowid colunas são chamadas de rowid mesas.

Se uma tabela tiver a chave primária que consiste em uma coluna e essa coluna for definida como INTEGER então esta coluna de chave primária se torna um alias para o rowid coluna.

Observe que se você atribuir outro tipo inteiro como BIGINT e UNSIGNED INT para a coluna de chave primária, esta coluna não será um alias para o rowid coluna.

Porque o rowid tabela organiza seus dados como uma árvore B, consultando e classificando dados de um rowid mesa são muito rápidos. É mais rápido do que usar uma chave primária que não seja um alias do rowid .

Outra observação importante é que se você declarar uma coluna com o INTEGER digite e PRIMARY KEY DESC cláusula, esta coluna não se tornará um alias para o rowid coluna:
CREATE TABLE table(
   pk INTEGER PRIMARY KEY DESC,
   ...
);Code language: SQL (Structured Query Language) (sql)

Criando exemplos de chave primária SQLite


A instrução a seguir cria uma tabela chamada countries que tem country_id coluna como chave primária.
CREATE TABLE countries (
   country_id INTEGER PRIMARY KEY,
   name TEXT NOT NULL
);Code language: SQL (Structured Query Language) (sql)

Tente

Como a chave primária dos countries tabela tem apenas uma coluna, definimos a chave primária usando PRIMARY KEY restrição de coluna.

É possível usar a PRIMARY KEY restrição de tabela para definir a chave primária que consiste em uma coluna, conforme mostrado na instrução a seguir:
CREATE TABLE languages (
   language_id INTEGER,
   name TEXT NOT NULL,
   PRIMARY KEY (language_id)
);Code language: SQL (Structured Query Language) (sql)

Tente

No entanto, para tabelas em que as chaves primárias consistem em mais de uma coluna, você deve usar PRIMARY KEY restrição de tabela para definir chaves primárias.

A instrução a seguir cria o country_languages tabela cuja chave primária consiste em duas colunas.
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)

Tente

Exemplo de adição de chave primária SQLite


Ao contrário de outros sistemas de banco de dados, por exemplo, MySQL e PostgreSQL, você não pode usar o ALTER TABLE instrução para adicionar uma chave primária a uma tabela existente.

Você precisa seguir estas etapas para contornar a limitação:
  1. Primeiro, desative a verificação de restrição de chave estrangeira.
  2. Em seguida, renomeie a tabela para outro nome de tabela (old_table)
  3. Em seguida, crie uma nova tabela (tabela) com a estrutura exata da tabela que você renomeou.
  4. Depois disso, copie os dados da tabela_antiga para a tabela.
  5. Por fim, ative a verificação de restrição de chave estrangeira

Veja as seguintes afirmações:
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)

Tente

A BEGIN TRANSACTION inicia uma nova transação. Ele garante que todas as instruções subsequentes sejam executadas com sucesso ou que nada seja executado.

O COMMIT declaração confirma todas as declarações.

Vamos criar um nome de tabela cities sem chave primária.
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)

Tente

Para adicionar a chave primária às cities tabela, execute as seguintes etapas:
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)

Tente

Se você usa a ferramenta SQLite GUI, pode usar a seguinte instrução para mostrar as informações da tabela.
PRAGMA table_info([cities]);Code language: SQL (Structured Query Language) (sql)

Tente

Neste tutorial, você aprendeu a usar o SQLite PRIMARY KEY restrição para definir a chave primária para uma tabela.