Eu tenho a seguinte tabela:
CREATE TABLE child(
id INTEGER PRIMARY KEY,
parent_id INTEGER,
description TEXT);
Como adiciono uma restrição de chave estrangeira parent_id
? Suponha que chaves estrangeiras estejam ativadas.
A maioria dos exemplos pressupõe que você esteja criando a tabela - eu gostaria de adicionar a restrição a uma existente.
sql
sqlite
foreign-keys
ddl
Dane O'Connor
fonte
fonte
Respostas:
Você não pode.
Embora a sintaxe SQL-92 para adicionar uma chave estrangeira à sua tabela seja a seguinte:
O SQLite não suporta a
ADD CONSTRAINT
variante doALTER TABLE
comando ( sqlite.org: Recursos do SQL que o SQLite não implementa ).Portanto, a única maneira de adicionar uma chave estrangeira no sqlite 3.6.1 é a
CREATE TABLE
seguinte:Infelizmente, você terá que salvar os dados existentes em uma tabela temporária, soltar a tabela antiga, criar a nova tabela com a restrição FK e copiar os dados novamente da tabela temporária. ( sqlite.org - Perguntas frequentes: Q11 )
fonte
RENAME TO
é uma das poucasALTER TABLE
variantes que atualmente são suportadas no sqlite 3. #Você pode adicionar a restrição se alterar a tabela e adicionar a coluna que usa a restrição.
Primeiro, crie a tabela sem o parent_id:
Em seguida, altere a tabela:
fonte
Verifique https://www.sqlite.org/lang_altertable.html#otheralter
fonte
Sim, você pode, sem adicionar uma nova coluna. Você deve ter o cuidado de fazê-lo corretamente, a fim de evitar a corrupção do banco de dados; portanto, faça um backup completo do banco de dados antes de tentar isso.
para o seu exemplo específico:
ou mais geralmente:
De qualquer forma, você provavelmente desejará ver primeiro qual é a definição SQL antes de fazer alterações:
Se você usar a abordagem replace (), poderá achar útil, antes de executar, testar primeiro o comando replace () executando:
fonte
Se você estiver usando o sqlite-manager do Firefox, faça o seguinte:
Em vez de soltar e criar a tabela novamente, é possível modificá-la dessa maneira.
Na caixa de texto Colunas, clique com o botão direito do mouse no último nome da coluna listado para abrir o menu de contexto e selecione Editar Coluna. Observe que se a última coluna na definição TABLE for a PRIMARY KEY, será necessário primeiro adicionar uma nova coluna e editar o tipo de coluna da nova coluna para adicionar a definição FOREIGN KEY. Na caixa Tipo de coluna, acrescente uma vírgula e o
definição após o tipo de dados. Clique no botão Alterar e, em seguida, clique no botão Sim na caixa de diálogo Operação perigosa.
Referência: Sqlite Manager
fonte
Você pode tentar isso:
fonte
Basicamente, você não pode, mas pode ignorar a situação.
A maneira correta de adicionar a restrição de chave estrangeira a uma tabela existente é o seguinte comando.
Em seguida, copie os dados parent_Id para o newCol e exclua a coluna Parent_Id . Portanto, não há necessidade de tabela temporária.
fonte
Primeiro, adicione uma coluna na tabela filho
Cid
e, emint
seguida,alter table
com o código abaixo. Dessa forma, você pode adicionar a chave estrangeiraCid
como chave primária da tabela pai e usá-la como chave estrangeira na tabela filho ... espero que ajude você, pois é bom para mim:fonte