12. Inserir valores em uma tabela

Escrito por Uianes Luiz Rockenbach Biondo.
Última atualização em 04 out. 2023

INSERT INTO, traduzido como INSERIR DENTRO DE, é um dos comandos básicos em SQL, utilizado para criar novos registros na tabela, ou seja, gravar novos valores/tuplas/linhas.

Essa instrução pode ser definida de duas formas. A primeira forma é informando todas as colunas e seus respectivos valores em seguida.

INSERT INTO nomeTabela (coluna1, coluna2, coluna3, ...)
VALUES (valor1, valor2, valor3, ...);

Outra forma de realizar a mesma ação ocorre assim, mas somente se você inserir valores em todas as colunas:

INSERT INTO nomeTabela
VALUES (valor1, valor2, valor3, ...);

Exemplo:

CREATE TABLE Cliente(
cliente_id INT(4) NOT NULL AUTO_INCREMENT,
cliente_nome VARCHAR(100) NOT NULL,
cliente_email VARCHAR(100) NOT NULL,
PRIMARY KEY(cliente_id),
UNIQUE(cliente_email)
);

INSERT INTO Cliente (cliente_nome, cliente_email)
VALUES ("Uianes", "uianes.biondo@iffarroupilha.edu.br");

Cuidado! Como a chave primária (cliente_id) recebeu a função AUTO_INCREMENT repare que na lista de colunas de INSERT INTO não adicionamos a PK. Mas você pode, desde que não insira um valor duplicado (ou já registrado).

Caso você executasse o seguinte comando:

INSERT INTO Cliente (cliente_email)
VALUES ("uianes.biondo@iffarroupilha.edu.br");

Apareceria uma mensagem de erro, pois "cliente_nome" foi definido como NOT NULL, e ao deixar uma coluna de fora da lista do INSERT INTO, o valor padrão a ser gravado é NULL. Portanto, atributos que receberam "NOT NULL" não podem ser deixados de fora.

Caso a tabela fosse a seguinte:

CREATE TABLE Cliente(
cliente_id INT(4) NOT NULL AUTO_INCREMENT,
cliente_nome VARCHAR(100),
cliente_email VARCHAR(100) NOT NULL,
PRIMARY KEY(cliente_id),
UNIQUE(cliente_email)
);

E o comando a ser executado posteriormente fosse:

INSERT INTO Cliente (cliente_email)
VALUES ("uianes.biondo@iffarroupilha.edu.br");

Neste caso, sim, tudo funcionaria. E os dados cadastrados seriam:

cliente_id -> 1
cliente_nome -> NULL
cliente_email -> "uianes.biondo@iffarroupilha.edu.br"

Outra observação!

Caso o comando acima fosse executado novamente:

INSERT INTO Cliente (cliente_email)
VALUES ("uianes.biondo@iffarroupilha.edu.br");

Um erro apareceria, informando que já existe esse valor cadastrado na tabela. E o campo "cliente_email" é UNIQUE, ou seja, não é possível cadastrar um valor duas ou mais vezes.

E como fazer para cadastrar vários usuários de uma só vez? Basta utilizar a seguinte sintaxe:

INSERT INTO nomeTabela (atributo1, atributo2, ...)
VALUES (cadastro1Valor1, cadastro1Valor2, ...),
(cadastro2Valor1, cadastro2Valor2, ...),
(cadastro3Valor1, cadastro3Valor2, ...);

Separamos os diferentes cadastros através de ",". Porém, o último cadastrado não pode receber ",", e sim, ";".

Sobre a forma de representar os valores, utilizamos o seguinte padrão:

Valores textuais serão representados dentro de aspas. Exemplo: "Nome".

Valores numéricos inteiros serão representados sem aspas. Exemplo: 10.

Valores numéricos decimais serão representados sem aspas, utilizando ".". Exemplo: 9.9

Valores de data e hora serão representados por aspas, em seu respectivo padrão.

Exemplo de data: "2023-07-25".

Exemplo de hora: "01:22:30".