Qual é a principal diferença entre INSERT INTO table VALUES ..
e INSERT INTO table SET
?
Exemplo:
INSERT INTO table (a, b, c) VALUES (1,2,3)
INSERT INTO table SET a=1, b=2, c=3
E o desempenho desses dois?
sql
mysql
performance
Irmantas
fonte
fonte
INSERT INTO table SET
não seja padrão. Parece muito mais claro. Acho que vou ter que usar aINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
sintaxe de qualquer maneira para me poupar de problemas se eu migrar para o Postgres.Respostas:
Tanto quanto eu posso dizer, ambas as sintaxes são equivalentes. O primeiro é o padrão SQL, o segundo é a extensão do MySQL.
Portanto, eles devem ser exatamente equivalentes ao desempenho.
http://dev.mysql.com/doc/refman/5.6/en/insert.html diz:
fonte
INSERT INTO table SET
? Isso é possível?Penso que a extensão se destina a permitir uma sintaxe semelhante para inserções e atualizações. No Oracle, um truque sintático semelhante é:
fonte
INSERT ... SET ...
eINSERT ... VALUES ...
. Para o recurso, você tem um código mais curto e de gravação mais rápida, maior legibilidade e eliminação de erros de digitação causados pela mistura da ordem das colunas ao escrever suaVALUES
cláusula. Meu intestino me diz que, na rede, o bem supera o mal, mas seu julgamento pode ser diferente.Como as sintaxes são equivalentes (no MySQL, de qualquer forma), prefiro a
INSERT INTO table SET x=1, y=2
sintaxe, pois é mais fácil modificar e mais fácil capturar erros na instrução, especialmente ao inserir muitas colunas. Se você precisar inserir 10 ou 15 ou mais colunas, é realmente fácil misturar algo usando a(x, y) VALUES (1,2)
sintaxe, na minha opinião.Se a portabilidade entre diferentes padrões SQL for um problema, talvez
INSERT INTO table (x, y) VALUES (1,2)
seja preferível.E se você deseja inserir vários registros em uma única consulta, não parece que a
INSERT INTO ... SET
sintaxe funcione, enquanto o outro funcionará. Mas, na maioria dos casos práticos, você faz um loop de um conjunto de registros para fazer inserções de qualquer maneira, embora possa haver alguns casos em que talvez seja possível construir uma consulta grande para inserir um monte de linhas em uma tabela em uma consulta, em comparação com uma consulta para cada linha, pode ter uma melhoria de desempenho. Realmente não sei.fonte