Resumo : neste tutorial, você aprenderá como usar uma única INSERT
instrução MySQL para inserir várias linhas em uma tabela.
Instrução MySQL INSERT de múltiplas linhas
Para inserir várias linhas em uma tabela, você usa a seguinte forma de INSERT
instrução:
INSERT INTO table_name (column_list)
VALUES
(value_list_1),
(value_list_2),
...
(value_list_n);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
- Primeiro, especifique o nome da tabela onde deseja inserir várias linhas após as
INSERT INTO
palavras-chave. - Segundo, liste as colunas da tabela nas quais deseja inserir dados. Esta lista de colunas é opcional, mas se for fornecida, você deverá fornecer valores correspondentes para cada coluna no
VALUES
valor. - Terceiro, especifique uma lista separada por vírgulas de dados de linha após a
VALUES
palavra-chave. Cada item da lista representa uma linha. O número de valores em cada item deve ser igual ao número de colunas no arquivocolumn_list
.
Observe que para inserir linhas de uma consulta em uma tabela, você usa a instrução INSERT INTO… SELECT .
MySQL INSERT limite de múltiplas linhas
Em teoria, você pode inserir qualquer número de linhas usando uma única INSERT
instrução.
Porém, quando o servidor MySQL recebe uma INSERT
instrução cujo tamanho é maior que o valor especificado pela max_allowed_packet
opção, ele emite um packet too large
erro e encerra a conexão.
Esta instrução mostra o valor atual da max_allowed_packet
variável:
SHOW VARIABLES LIKE 'max_allowed_packet';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 67108864 |
+--------------------+----------+
1 row in set (0.01 sec)
Linguagem de código: JavaScript ( javascript )
O número na Value
coluna é o número de bytes. Observe que o valor no seu servidor de banco de dados pode ser diferente.
Para definir um novo valor para a max_allowed_packet
variável, você usa a SET GLOBAL
instrução:
SET GLOBAL max_allowed_packet=size;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta instrução, the size
é um número inteiro que representa o número do tamanho máximo permitido do pacote em bytes.
Observe que o max_allowed_packet
não afeta a INSERT INTO .. SELECT
declaração. A INSERT INTO .. SELECT
instrução pode inserir quantas linhas você desejar.
MySQL INSERT exemplos de múltiplas linhas
Vejamos alguns exemplos de uso da INSERT
instrução de múltiplas linhas.
1) Insira várias linhas em uma tabela
Primeiro, crie uma nova tabela chamada projects
para demonstração:
CREATE TABLE projects(
project_id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
start_date DATE,
end_date DATE,
PRIMARY KEY(project_id)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, insira duas linhas na projects
tabela usando a INSERT
instrução de múltiplas linhas:
INSERT INTO projects(name, start_date, end_date)
VALUES
('AI for Marketing', '2019-08-01', '2019-12-31'),
('ML for Sales', '2019-05-15', '2019-11-20');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
MySQL emitiu a seguinte mensagem:
Query OK, 2 rows affected (0.01 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A saída indica que a instrução inseriu duas linhas na projects
tabela com sucesso.
Terceiro, recupere os dados da projects
tabela para verificar as inserções:
SELECT * FROM projects;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------------+------------------+------------+------------+
| project_id | name | start_date | end_date |
+------------+------------------+------------+------------+
| 1 | AI for Marketing | 2019-08-01 | 2019-12-31 |
| 2 | ML for Sales | 2019-05-15 | 2019-11-20 |
+------------+------------------+------------+------------+
2 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
2) Usando a função LAST_INSERT_ID()
Ao inserir várias linhas e usar a LAST_INSERT_ID()
função para obter o último ID inserido de uma AUTO_INCREMENT
coluna, você obterá o ID da primeira linha inserida, não o ID da última linha inserida. Por exemplo:
Primeiro, insira três linhas na tabela de projetos:
INSERT INTO projects(name, start_date, end_date)
VALUES
('NeuroSynthIQ', '2023-12-01', '2024-12-31'),
('QuantumMind Explorer', '2023-05-15', '2024-12-20'),
('SentientBot Assistant', '2023-05-15','2024-10-20');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, recupere os dados da tabela de projetos:
SELECT * FROM projects;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------------+-----------------------+------------+------------+
| project_id | name | start_date | end_date |
+------------+-----------------------+------------+------------+
| 1 | AI for Marketing | 2019-08-01 | 2019-12-31 |
| 2 | ML for Sales | 2019-05-15 | 2019-11-20 |
| 3 | NeuroSynthIQ | 2023-12-01 | 2024-12-31 |
| 4 | QuantumMind Explorer | 2023-05-15 | 2024-12-20 |
| 5 | SentientBot Assistant | 2023-05-15 | 2024-10-20 |
+------------+-----------------------+------------+------------+
5 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Terceiro, obtenha o último ID inserido:
SELECT LAST_INSERT_ID();
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 3 |
+------------------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
A saída mostra que LAST_INSERT_ID()
retorna o id da primeira linha nas três linhas, não o id da última linha.
Resumo
- Use a
INSERT
instrução MySQL para inserir várias linhas em uma tabela.