Inserindo Dados
INSERT INTO -- adicionando registros
O comando INSERT INTO adiciona novos registros (linhas) numa tabela. Vamos partir desta tabela criada na aula anterior:
CREATE TABLE alunos (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
idade INT,
ativo BOOLEAN DEFAULT TRUE,
criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Inserindo um registro
A sintaxe basica:
INSERT INTO alunos (nome, email, idade)
VALUES ('Ana Silva', '[email protected]', 20);
-- → Insere 1 registro
Voce lista as colunas entre parenteses e os valores na mesma ordem:
INSERT INTO alunos (nome, email, idade)
-- ↓ ↓ ↓
VALUES ('Ana', 'ana@...', 20);
Inserindo varios registros de uma vez
Separe cada conjunto de valores com virgula:
INSERT INTO alunos (nome, email, idade) VALUES
('Ana Silva', '[email protected]', 20),
('Carlos Souza', '[email protected]', 22),
('Julia Santos', '[email protected]', 19),
('Pedro Lima', '[email protected]', 21);
-- → Insere 4 registros de uma vez
Inserindo todas as colunas
Se voce informar valores para todas as colunas (na ordem da tabela), pode omitir a lista de colunas:
INSERT INTO alunos
VALUES (NULL, 'Ana Silva', '[email protected]', 20, TRUE, NOW());
-- id↑ nome↑ email↑ idade↑ ativo↑ criado_em↑
Verificando a insercao
Depois de inserir, use SELECT para conferir:
SELECT * FROM alunos;
-- → Mostra todos os registros da tabela
Resultado:
| id | nome | idade | ativo | criado_em | |
|---|---|---|---|---|---|
| 1 | Ana Silva | [email protected] | 20 | 1 | 2024-03-15 14:30:00 |
| 2 | Carlos Souza | [email protected] | 22 | 1 | 2024-03-15 14:30:01 |
Mesma operacao com ORMs
Agora vamos ver como fazer a mesma coisa usando ORMs populares. Em vez de escrever SQL na mao, o ORM gera o SQL pra voce.
Prisma
Inserindo um registro:
const aluno = await prisma.aluno.create({
data: {
nome: 'Ana Silva',
email: '[email protected]',
idade: 20,
},
});
// → { id: 1, nome: 'Ana Silva', email: '[email protected]', ... }
Inserindo varios:
const resultado = await prisma.aluno.createMany({
data: [
{ nome: 'Ana Silva', email: '[email protected]', idade: 20 },
{ nome: 'Carlos Souza', email: '[email protected]', idade: 22 },
{ nome: 'Julia Santos', email: '[email protected]', idade: 19 },
],
});
// → { count: 3 }
Drizzle
Inserindo um registro:
const [aluno] = await db.insert(alunos).values({
nome: 'Ana Silva',
email: '[email protected]',
idade: 20,
}).returning();
// → { id: 1, nome: 'Ana Silva', email: '[email protected]', ... }
Inserindo varios:
await db.insert(alunos).values([
{ nome: 'Ana Silva', email: '[email protected]', idade: 20 },
{ nome: 'Carlos Souza', email: '[email protected]', idade: 22 },
{ nome: 'Julia Santos', email: '[email protected]', idade: 19 },
]);
Lucid (AdonisJS)
Inserindo um registro:
const aluno = await Aluno.create({
nome: 'Ana Silva',
email: '[email protected]',
idade: 20,
});
// → Instancia do model com id preenchido
Inserindo varios:
const alunos = await Aluno.createMany([
{ nome: 'Ana Silva', email: '[email protected]', idade: 20 },
{ nome: 'Carlos Souza', email: '[email protected]', idade: 22 },
{ nome: 'Julia Santos', email: '[email protected]', idade: 19 },
]);
// → Array de instancias do model
Comparativo Rapido
| Operacao | SQL | Prisma | Drizzle | Lucid |
|---|---|---|---|---|
| Inserir 1 | INSERT INTO ... VALUES (...) | prisma.model.create() | db.insert().values() | Model.create() |
| Inserir N | INSERT INTO ... VALUES (...), (...) | prisma.model.createMany() | db.insert().values([...]) | Model.createMany() |
Erros Comuns
Coluna NOT NULL omitida
INSERT INTO alunos (email) VALUES ('[email protected]');
-- → ERRO! Field 'nome' doesn't have a default value
Valor duplicado em coluna UNIQUE
INSERT INTO alunos (nome, email) VALUES ('Ana', '[email protected]');
INSERT INTO alunos (nome, email) VALUES ('Outra Ana', '[email protected]');
-- → ERRO! Duplicate entry '[email protected]' for key 'email'
Tipo de dado errado
INSERT INTO alunos (nome, email, idade) VALUES ('Ana', '[email protected]', 'vinte');
-- → ERRO! Incorrect integer value: 'vinte' for column 'idade'
Exercicios
-
Crie a tabela
alunos(como no exemplo) e insira 5 alunos usando um unico INSERT INTO. -
Tente inserir um aluno sem nome (omitindo a coluna
nome). O que acontece? -
Tente inserir dois alunos com o mesmo email. O que acontece?
-
Insira um aluno sem informar a idade. Qual valor aparece na coluna
idade? -
Reescreva os INSERTs do exercicio 1 usando Prisma ou Drizzle ou Lucid (escolha um).
Referencias
Testa o que você leu
5 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.