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:
- Primeiro, desative a verificação de restrição de chave estrangeira.
- Em seguida, renomeie a tabela para outro nome de tabela (old_table)
- Em seguida, crie uma nova tabela (tabela) com a estrutura exata da tabela que você renomeou.
- Depois disso, copie os dados da tabela_antiga para a tabela.
- 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.