Pular para o conteúdo

A primeira escola especializada em tecnologia do Alto Solimões, com corpo técnico formado na área.

Modulo 2: CRUD Basico

Inserindo Dados

INSERT INTO para adicionar registros

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:

idnomeemailidadeativocriado_em
1Ana Silva[email protected]2012024-03-15 14:30:00
2Carlos Souza[email protected]2212024-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

OperacaoSQLPrismaDrizzleLucid
Inserir 1INSERT INTO ... VALUES (...)prisma.model.create()db.insert().values()Model.create()
Inserir NINSERT 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

  1. Crie a tabela alunos (como no exemplo) e insira 5 alunos usando um unico INSERT INTO.

  2. Tente inserir um aluno sem nome (omitindo a coluna nome). O que acontece?

  3. Tente inserir dois alunos com o mesmo email. O que acontece?

  4. Insira um aluno sem informar a idade. Qual valor aparece na coluna idade?

  5. 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.

Pergunta 1 de 5
Qual é a sintaxe correta para inserir um registro?