Chave Primária SQLite

Resumo : neste tutorial, você aprenderá como usar a PRIMARY KEYrestrição SQLite 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 possui uma e apenas uma chave primária.

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

Primeiro, se a chave primária tiver apenas uma coluna, use a PRIMARY KEYrestrição de coluna para definir a chave primária da seguinte maneira:

CREATE TABLE table_name(
   column_1 INTEGER NOT NULL PRIMARY KEY,
   ...
);Linguagem de código:  PHP  ( php )

Segundo, caso a chave primária consista em duas ou mais colunas, você usa a PRIMARY KEYrestrição de tabela para definir a primária, 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,...)
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

No padrão SQL, a coluna da chave primária não deve conter NULLvalores. Isso significa que a coluna da chave primária possui uma NOT NULLrestrição implícita.

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

Chave primária SQLite e tabela rowid

Quando você cria uma tabela sem especificar a WITHOUT ROWIDopção, o SQLite adiciona uma coluna implícita chamada rowidque armazena um número inteiro assinado de 64 bits. A rowidcoluna é uma chave que identifica exclusivamente as linhas da tabela. As tabelas que possuem rowidcolunas são chamadas rowidde tabelas.

Se uma tabela tiver a chave primária que consiste em uma coluna, e essa coluna for definida como, INTEGERessa coluna de chave primária se tornará um alias para a rowidcoluna.

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

Como a rowidtabela organiza seus dados como uma árvore B, a consulta e a classificação dos dados de uma rowidtabela são muito rápidas. É mais rápido do que usar uma chave primária que não seja um alias do arquivo rowid.

Outra observação importante é que se você declarar uma coluna com o INTEGERtipo e PRIMARY KEY DESCa cláusula, esta coluna não se tornará um alias para a rowidcoluna:

CREATE TABLE table(
   pk INTEGER PRIMARY KEY DESC,
   ...
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Criando exemplos de chave primária SQLite

A instrução a seguir cria uma tabela chamada countriesque possui country_idcoluna como chave primária.

CREATE TABLE countries (
   country_id INTEGER PRIMARY KEY,
   name TEXT NOT NULL
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Como a chave primária da countriestabela possui apenas uma coluna, definimos a chave primária usando PRIMARY KEYrestrição de coluna.

É possível usar a PRIMARY KEYrestrição de tabela para definir a chave primária que consiste em uma coluna, conforme mostrado na seguinte instrução:

CREATE TABLE languages (
   language_id INTEGER,
   name TEXT NOT NULL,
   PRIMARY KEY (language_id)
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

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

A instrução a seguir cria a country_languagestabela 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
);Linguagem de código:  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 a 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 constante da chave estrangeira .
  2. Em seguida, renomeie a tabela para outro nome de tabela (old_table)
  3. Em seguida, crie uma nova tabela (tabela) com estrutura exata da tabela que você renomeou.
  4. Depois disso, copie os dados de old_table para a tabela.
  5. Finalmente, ative a verificação de restrição de chave estrangeira em

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;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

O BEGIN TRANSACTIONinicia uma nova transação. Ele garante que todas as instruções subsequentes sejam executadas com êxito ou que nada seja executado.

A COMMITdeclaração confirma todas as declarações.

Vamos criar um nome de tabela citiessem chave primária.

CREATE TABLE cities (
   id INTEGER NOT NULL,
   name text NOT NULL
);

INSERT INTO cities (id, name)
VALUES(1, 'San Jose');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Para adicionar a chave primária à citiestabela, 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;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Se você usar a ferramenta SQLite GUI, poderá usar a seguinte instrução para mostrar as informações da tabela.

PRAGMA table_info([cities]);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Tente

Exemplo de chave primária SQLite

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

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *