Criação e alteração de dados em SQL
DDL, restrições, tipos SQLite, integridade referencial e INSERT, UPDATE e DELETE.
Declarar o esquema
DDL cria e altera o esquema; DML consulta ou altera os tuplos.
SELECT id, valor, typeof(valor) AS tipo FROM Quantidade;CREATE TABLE Quantidade(
id INTEGER PRIMARY KEY,
valor INTEGER NOT NULL
CHECK (typeof(valor) = 'integer' AND valor > 0)
);
INSERT INTO Quantidade VALUES (1, 7);Executa a consulta para ver as tabelas.
Devolve id 1, valor 7, tipo integer. Em tabelas SQLite comuns, INTEGER é afinidade, não imposição de tipo; o CHECK do exemplo exige tipo e valor.
| Restrição | O que garante e o que não garante |
|---|---|
PRIMARY KEY | Escolhe a identidade. Em chaves textuais ou compostas comuns, declara NOT NULL. |
NOT NULL | Exige valor conhecido. |
UNIQUE | Proíbe conhecidos repetidos; SQLite admite vários nulos. |
CHECK | Rejeita quando a expressão é falsa; desconhecido não rejeita. CHECK(x>0) aceita NULL. |
DEFAULT | Preenche coluna omitida; não substitui um NULL explícito. |
VARCHAR(20) não limita comprimento em SQLite. STRICT impõe tipos, mas as regras do domínio continuam necessárias. INTEGER PRIMARY KEY é o rowid (INT PRIMARY KEY não); a atribuição automática pode reutilizar apagados, AUTOINCREMENT proíbe-o com custo de sqlite_sequence.
Ligar tabelas
Em SQLite, corre PRAGMA foreign_keys = ON em cada ligação, antes da transação.
- A referência tem de existir numa primária ou única compatível; estrangeira não é automaticamente única.
- Numa estrangeira composta, todas as colunas apontam ao mesmo tuplo; se qualquer componente for nulo, SQLite dispensa a correspondência. Para participação obrigatória,
NOT NULLem todas. DEFERRABLE INITIALLY DEFERREDadmite inconsistência temporária até aoCOMMIT.
| Política | Efeito ao alterar ou eliminar o alvo |
|---|---|
NO ACTION | Recusa se a referência estiver inválida na verificação. |
RESTRICT | Recusa de imediato havendo dependentes, mesmo em diferida. |
CASCADE | Propaga a alteração ou elimina dependentes. |
SET NULL | Escreve nulos, se permitido. |
SET DEFAULT | Escreve o default, que tem de satisfazer a referência. |
Uma estrangeira em Item não obriga nenhuma encomenda a ter linhas; esse mínimo pede outro mecanismo.
Alterar dados e esquema
- Nomeia colunas em
INSERT;INSERT ... SELECTinsere resultados. UPDATEeDELETEsemWHEREabrangem todas as linhas; restrições valem também em atualizações.INSERT OR REPLACEpode apagar a linha em conflito e inserir outra, com efeitos referenciais: não é atualização.ALTER TABLEmuda o esquema dentro dos limites da versão;DROP TABLEapaga estrutura e dados;DELETEconserva a estrutura.CREATE TABLE ... AS SELECTcopia resultados, mas em SQLite não copia primárias, estrangeiras nemCHECKs.
Preços em cêntimos inteiros evitam erros binários; para euros divide por 100.0, porque em SQLite 5 / 2 dá 2.