Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como inserir na mesma tabela no MySQL?


Às vezes, pode ser necessário criar rapidamente muitos dados para teste de carga. Você pode selecionar e inserir na mesma tabela no MySQL. Essa abordagem aumenta rapidamente suas tabelas existentes. Dá muitos discos para brincar. Aqui estão algumas maneiras de fazer isso.

Inserir na mesma tabela no MySQL


Sintaxe
INSERT INTO table_name ( field1, field2,...fieldN )
                       SELECT field1, field2, fieldN from table_name;

Exemplo
Para uma tabela table_name com colunas a, b, c
+------+------+------+
|   a  |   b  |   c  |
+------+------+------+
|   1  |   2  |   3  |
|   4  |   5  |   6  |
|   7  |   8  |   9  |
|   3  |   3  |   3  |
+------+------+------+

Inserir na mesma tabela no MySQL todos os registros de uma tabela
mysql> INSERT INTO table_name (a,b,c) select a,b,c from table_name;
+------+------+------+
|   a  |   b  |   c  |
+------+------+------+
|   1  |   2  |   3  |
|   4  |   5  |   6  |
|   7  |   8  |   9  |
|   3  |   3  |   3  |
|   1  |   2  |   3  |
|   4  |   5  |   6  |
|   7  |   8  |   9  |
|   3  |   3  |   3  |
+------+------+------+

Inserir na mesma tabela no MySQL alguns registros de uma tabela
mysql> INSERT INTO table_name (a,b,c) select a,b,c from table_name where a=1 or a=3;
+------+------+------+
|   a  |   b  |   c  |
+------+------+------+
|   1  |   2  |   3  |
|   4  |   5  |   6  |
|   7  |   8  |   9  |
|   3  |   3  |   3  |
|   1  |   2  |   3  |
|   3  |   3  |   3  |
+------+------+------+

Você pode receber um erro de valor duplicado se um desses campos for uma chave primária ou se você tiver uma restrição de exclusividade para um campo. Veja como você pode evitá-lo.

Inserir na mesma tabela no MySQL sem duplicatas


Sintaxe
INSERT INTO table_name ( field1, field2,...fieldN )
                       SELECT field1, field2, fieldN from table_name
                       ON DUPLICATE KEY
                       UPDATE primary_key_field=<expression> ;

Exemplo

Para uma tabela table_name com colunas a, b, c e c é a chave primária
+------+------+------+
|   a  |   b  |   c  |
+------+------+------+
|   1  |   2  |   3  |
|   4  |   5  |   6  |
|   7  |   8  |   9  |
+------+------+------+

Inserir na mesma tabela no MySQL todos os registros de uma tabela
mysql> INSERT INTO table_name (a,b,c) select a,b,c from table_name ON DUPLICATE KEY c=c+1;
+------+------+------+
|   a  |   b  |   c  |
+------+------+------+
|   1  |   2  |   3  |
|   4  |   5  |   6  |
|   7  |   8  |   9  |
|   1  |   2  |   4  |
|   4  |   5  |   7  |
|   7  |   8  |  10  |
+------+------+------+

Inserir na mesma tabela no MySQL alguns registros de uma tabela
mysql> INSERT INTO table_name (a,b,c) select a,b,c from table_name where a=1 or a=3 ON DUPLICATE KEY c=c+1;
+------+------+------+
|   a  |   b  |   c  |
+------+------+------+
|   1  |   2  |   3  |
|   4  |   5  |   6  |
|   7  |   8  |   9  |
|   1  |   2  |   5  |
+------+------+------+

Você pode ler mais sobre Como fazer uma inserção em massa no MySQL