MySQL Inserir Várias Linhas

Resumo : neste tutorial, você aprenderá como usar uma única INSERTinstruçã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 INSERTinstruçã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 INTOpalavras-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 VALUESvalor.
  • Terceiro, especifique uma lista separada por vírgulas de dados de linha após a VALUESpalavra-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 arquivo column_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 INSERTinstrução.

Porém, quando o servidor MySQL recebe uma INSERTinstrução cujo tamanho é maior que o valor especificado pela max_allowed_packetopção, ele emite um packet too largeerro e encerra a conexão.

Esta instrução mostra o valor atual da max_allowed_packetvariá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 Valuecoluna é 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_packetvariável, você usa a SET GLOBALinstruçã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_packetnão afeta a INSERT INTO .. SELECTdeclaração. A INSERT INTO .. SELECTinstrução pode inserir quantas linhas você desejar.

MySQL INSERT exemplos de múltiplas linhas

Vejamos alguns exemplos de uso da INSERTinstrução de múltiplas linhas.

1) Insira várias linhas em uma tabela

Primeiro, crie uma nova tabela chamada projectspara 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 projectstabela usando a INSERTinstruçã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 projectstabela com sucesso.

Terceiro, recupere os dados da projectstabela 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 )
Exemplo de inserção de múltiplas linhas no MySQL

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_INCREMENTcoluna, 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 INSERTinstrução MySQL para inserir várias linhas em uma tabela.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *