Posso encontrar "gráficos" de sintaxe neste site do SQLite, mas nenhum exemplo e meu código está travando. Eu tenho outras tabelas com restrições exclusivas em uma única coluna, mas quero adicionar uma restrição à tabela em duas colunas. É isso que eu tenho que está causando uma SQLiteException com a mensagem "erro de sintaxe".
CREATE TABLE name (column defs)
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE
Estou fazendo isso com base no seguinte:
Para ficar claro, a documentação no link que forneci diz que CONTSTRAINT name
deve vir antes da minha definição de restrição.
Algo que pode levar à solução, porém, é que tudo o que segue minhas definições de coluna entre parênteses é o que o depurador reclama.
Se eu colocar
...last_column_name last_col_datatype) CONSTRAINT ...
o erro está próximo de "CONSTRAINT": erro de sintaxe
Se eu colocar
...last_column_name last_col_datatype) UNIQUE ...
o erro está próximo de "UNIQUE": erro de sintaxe
Respostas:
Coloque a declaração UNIQUE na seção de definição de coluna; exemplo de trabalho:
fonte
ON CONFLICT IGNORE
(ainda não tentei substituir) com mais de duas colunas, mas não estou vendo isso respeitar a restrição exclusiva, apenas adiciona alegremente as duplicatas.ON CONFLICT REPLACE
lo pode não ser o que você deseja - ele exclui linhas pré-existentes para permitir que a nova linha seja inserida. Normalmente, eu gostaria de abortar ou descolar a violação de restrição. Cláusula SQLite ON CONFLICTBem, sua sintaxe não corresponde ao link que você incluiu, que especifica:
fonte
Cuidado ao definir a tabela, pois você obterá resultados diferentes ao inserir. Considere o seguinte
Embora o efeito de inserção / atualização seja o mesmo, as
id
alterações baseadas no tipo de definição da tabela (consulte a segunda tabela em que 'Alice' agora possuiid = 4
; a primeira tabela está fazendo mais do que eu espero que ela faça, mantenha a PRIMARY KEY na mesma ) Esteja ciente deste efeito.fonte
Se você já possui uma tabela e não pode / não deseja recriá-la por qualquer motivo, use índices :
fonte