O que há de errado com esta consulta:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Funciona sem a WHERE
cláusula. Eu parecia ter esquecido meu SQL ..
A sintaxe INSERT do MySQL não suporta a cláusula WHERE, portanto sua consulta falhará. Supondo que sua id
coluna seja chave exclusiva ou primária:
Se você está tentando inserir uma nova linha com o ID 1, deve estar usando:
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
Se você estiver tentando alterar os valores de peso / peso desejado para uma linha existente com o ID 1, use:
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;
Se você quiser, também pode usar a sintaxe INSERT .. ON DUPLICATE KEY da seguinte maneira:
INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
OU mesmo assim:
INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
Também é importante notar que, se sua id
coluna é uma coluna de autoincremento, você também pode omitir tudo do seu INSERT e deixar o mysql incrementá-lo normalmente.
If you're trying to insert a new row with ID 1 you should be using
insira. No seu caso, você está tentando inserir quando ID 1 já existe e é uma chave primária ou única e falha assim que você deve ou sintaxe uso UPDATE ou sintaxe INSERIR .. ON DUPLICATE KEYVocê não pode combinar uma cláusula WHERE com uma cláusula VALUES. Você tem duas opções, tanto quanto eu sei.
INSERT especificando valores
INSERT usando uma instrução SELECT
fonte
Você usa a cláusula WHERE para consultas UPDATE. Quando você insere, está assumindo que a linha não existe.
A declaração do OP seria então;
No MySQL, se você deseja INSERT ou UPDATE, pode usar a consulta REPLACE com uma cláusula WHERE. Se o WHERE não existir, INSERIR, caso contrário, ATUALIZA.EDITAR
Penso que o argumento de Bill Karwin é importante o suficiente para retirar os comentários e torná-lo muito óbvio. Obrigado Bill, já faz muito tempo que não trabalho com o MySQL, lembrei-me de ter problemas com o REPLACE, mas esqueci o que eram. Eu deveria ter procurado.
Não é assim que o REPLACE do MySQL funciona. Ele executa um DELETE (que pode ser um no-op se a linha não existir), seguido por um INSERT. Pense nas consequências vis. gatilhos e dependências de chave estrangeira. Em vez disso, use INSERT ... ON DUPLICATE KEY UPDATE.
fonte
Não acredito que a inserção tenha uma cláusula WHERE.
fonte
A consulta de inserção não suporta onde a palavra-chave *
As condições se aplicam porque você pode usar a condição where para instruções de sub-seleção. Você pode executar inserções complicadas usando sub-seleções.
Por exemplo:
Ao colocar um "select" na instrução de inserção, você pode executar várias inserções rapidamente.
Com esse tipo de inserção, convém verificar o número de linhas sendo inseridas. Você pode determinar o número de linhas que serão inseridas executando a seguinte instrução SQL antes de executar a inserção.
Você pode certificar-se de não inserir informações duplicadas usando a condição EXISTS.
Por exemplo, se você tivesse uma tabela chamada clients com uma chave primária de client_id, poderia usar a seguinte instrução:
Esta instrução insere vários registros com uma subseleção.
Se você deseja inserir um único registro, pode usar a seguinte instrução:
O uso da tabela dupla permite inserir seus valores em uma instrução select, mesmo que os valores não estejam armazenados atualmente em uma tabela.
Consulte também Como inserir com a cláusula where
fonte
A resposta certa para esta pergunta será assim:
uma). SE quiser selecionar antes de inserir:
b) Se o registro já existir, use update em vez de insert:
Deveria estar
c) Se você deseja atualizar ou inserir ao mesmo tempo
d) Se você deseja CLONAR um registro da mesma tabela, lembre-se de que não pode selecionar a tabela na qual está inserindo.
Eu acho que isso cobre a maioria dos cenários
fonte
Você simplesmente não pode usar WHERE ao fazer uma instrução INSERT:
deveria estar:
A parte WHERE funciona apenas nas instruções SELECT:
ou nas instruções UPDATE:
fonte
Inserir em = Adicionando linhas a uma tabela
Upate = atualizar linhas específicas.
O que a cláusula where descreveria em sua inserção? Não tem nada para combinar, a linha ainda não existe ...
fonte
Você pode fazer INSERT condicional com base na entrada do usuário. Esta consulta será inserida apenas se os vars de entrada '$ userWeight' e '$ userDesiredWeight' não estiverem em branco
fonte
Depende da situação em que o INSERT pode realmente ter uma cláusula where.
Por exemplo, se você estiver combinando valores de um formulário.
Faz sentido, não é?
fonte
A maneira mais simples é usar o IF para violar sua principal restrição. Isso funciona apenas para INSERT IGNORE, mas permitirá que você use restrições em um INSERT.
fonte
Depois de
WHERE
cláusula, você coloca uma condição e é usada para buscar dados ou atualizar uma linha. Quando você está inserindo dados, assume-se que a linha não existe.Então, a questão é: existe alguma linha cujo ID seja 1? Nesse caso, use MySQL UPDATE , caso contrário, use MySQL INSERT .
fonte
Se você estiver especificando um registro específico no para inserir dados, é melhor usar a
UPDATE
instrução em vez daINSERT
instrução.Esse tipo de consulta que você escreveu na pergunta é como uma consulta fictícia.
Sua consulta é: -
Aqui, você está especificando o id = 1, para usar melhor a
UPDATE
instrução para atualizar o registro existente. Não é recomendável usar aWHERE
cláusula no caso deINSERT
.Você deve usarUPDATE
.Agora usando a consulta de atualização: -
fonte
A resposta é definitivamente não.
Adicionar uma cláusula WHERE após INSERT INTO ... VALUES ... é apenas SQL inválido e não será analisado.
O erro retornado pelo MySQL é:
A parte mais importante da mensagem de erro é
que mostra a parte específica que o analisador não esperava encontrar aqui: a cláusula WHERE.
fonte
está totalmente errado. INSERT QUERY não possui uma cláusula WHERE, apenas UPDATE QUERY possui. Se você deseja adicionar dados Onde id = 1, sua consulta será
fonte
Não. Tanto quanto sei, você não pode adicionar a cláusula WHERE a esta consulta. Talvez eu tenha esquecido meu SQL também, porque não sei ao certo por que você precisa dele.
fonte
Você não deve usar a condição where na instrução Insert. Se você deseja fazer, use insert em uma instrução de atualização e atualize um registro existente.
Na verdade, posso saber por que você precisa de uma cláusula where na instrução Insert?
Talvez com base no motivo, eu sugiro uma opção melhor.
fonte
Eu acho que sua melhor opção é usar REPLACE em vez de INSERT
fonte
LEIA ISTO TAMBÉM
Não faz sentido ... mesmo literalmente
INSERT
significa adicionar aenew row
quando você dizWHERE
que define em qual linha está falando noSQL
.Portanto, não é possível adicionar uma nova linha com uma condição em uma linha existente.
Você deve escolher entre as seguintes opções:
A. Use em
UPDATE
vez deINSERT
B. Use
INSERT
e remova aWHERE
cláusula (estou apenas dizendo ...) ou se você é realmente obrigado a usarINSERT
e,WHERE
em uma única declaração, isso pode ser feito apenas através da cláusula INSERT..SELECT ...Mas isso serve a um propósito totalmente diferente e, se você definiu o ID como Chave Primária, essa inserção falhará; caso contrário, uma nova linha será inserida com o ID = 1.
fonte
Estou ciente de que este é um post antigo, mas espero que ainda ajude alguém, com o que espero que seja um exemplo simples:
fundo:
Eu tive muitos casos: o mesmo usuário é listado várias vezes com vários valores e eu queria criar um novo registro, portanto, UPDATE não faria sentido no meu caso e eu precisava abordar um usuário específico, como faria usando uma cláusula WHERE.
Ao usar essa construção, você realmente direciona um usuário específico (user123, que possui outros registros), para que você realmente não precise de uma cláusula where, eu acho.
a saída pode ser:
fonte
Uma maneira de usar INSERT e ONDE é
INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953);
Nesse caso, é como um teste de existência. Não há exceção se você executá-lo duas ou mais vezes ...fonte
A sintaxe correta para o mysql inserir na instrução usando o método post é:
fonte
Eu não acho que podemos usar a cláusula where na instrução insert
fonte
fonte
Você não pode usar INSERT e WHERE juntos. Você pode usar a cláusula UPDATE para adicionar valor a uma coluna específica em um campo específico, como abaixo do código;
fonte
Eu acho que o formulário correto para inserir um valor em uma linha de especificação é:
funciona e é semelhante se você escrever no Microsoft SQL Server
no mysql você precisa atualizar a tabela.
fonte
Você pode fazer isso com o código abaixo:
fonte