Quel est le problème avec cette requête:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Cela fonctionne sans la WHERE
clause. J'ai semblé avoir oublié mon SQL.
La syntaxe MySQL INSERT ne prend pas en charge la clause WHERE, donc votre requête en l'état échouera. En supposant que votre id
colonne est une clé unique ou primaire:
Si vous essayez d'insérer une nouvelle ligne avec l'ID 1, vous devriez utiliser:
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
Si vous essayez de modifier les valeurs de poids / poids souhaité pour une ligne existante avec l'ID 1, vous devez utiliser:
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;
Si vous le souhaitez, vous pouvez également utiliser la syntaxe INSERT .. ON DUPLICATE KEY comme suit:
INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
OU même comme ça:
INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
Il est également important de noter que si votre id
colonne est une colonne à auto-incrémentation, vous pouvez aussi bien l'omettre de votre INSERT et laisser mysql l'incrémenter comme d'habitude.
If you're trying to insert a new row with ID 1 you should be using
INSÉRER DANS. Dans votre cas, vous essayez d'insérer lorsque l'ID 1 existe déjà et qu'il s'agit d'une clé primaire ou unique et échoue, vous devez donc utiliser la syntaxe UPDATE ou INSERT .. Syntaxe ON DUPLICATE KEYVous ne pouvez pas combiner une clause WHERE avec une clause VALUES. Vous avez deux options pour autant que je sache -
INSÉRER en spécifiant des valeurs
INSERT à l'aide d'une instruction SELECT
la source
Vous utilisez la clause WHERE pour les requêtes UPDATE. Lorsque vous INSERT, vous supposez que la ligne n'existe pas.
La déclaration du PO deviendrait alors;
Dans MySQL, si vous souhaitez INSERT ou UPDATE, vous pouvez utiliser la requête REPLACE avec une clause WHERE. Si le WHERE n'existe pas, il INSERTS, sinon il MISE À JOUR.ÉDITER
Je pense que l'argument de Bill Karwin est suffisamment important pour sortir des commentaires et le rendre très évident. Merci Bill, cela fait trop longtemps que je n'ai pas travaillé avec MySQL, je me suis souvenu que j'avais des problèmes avec REPLACE, mais j'ai oublié ce qu'ils étaient. J'aurais dû le chercher.
Ce n'est pas ainsi que fonctionne REPLACE de MySQL. Il fait un DELETE (qui peut être un no-op si la ligne n'existe pas), suivi d'un INSERT. Pensez aux conséquences vis-à-vis. déclencheurs et dépendances de clé étrangère. À la place, utilisez INSERT ... ON DUPLICATE KEY UPDATE.
la source
Je ne pense pas que l'encart contienne une clause WHERE.
la source
La requête d'insertion ne prend pas en charge le mot clé where *
Les conditions s'appliquent car vous pouvez utiliser la condition where pour les instructions de sous-sélection. Vous pouvez effectuer des insertions compliquées à l'aide de sous-sélections.
Par exemple:
En plaçant un "select" dans l'instruction d'insertion, vous pouvez effectuer rapidement plusieurs insertions.
Avec ce type d'insertion, vous souhaiterez peut-être vérifier le nombre de lignes insérées. Vous pouvez déterminer le nombre de lignes qui seront insérées en exécutant l'instruction SQL suivante avant d'effectuer l'insertion.
Vous pouvez vous assurer que vous n'insérez pas d'informations en double à l'aide de la condition EXISTS.
Par exemple, si vous aviez une table nommée clients avec une clé primaire de client_id, vous pouvez utiliser l'instruction suivante:
Cette instruction insère plusieurs enregistrements avec une sous-sélection.
Si vous souhaitez insérer un seul enregistrement, vous pouvez utiliser l'instruction suivante:
L'utilisation de la table double vous permet de saisir vos valeurs dans une instruction de sélection, même si les valeurs ne sont pas actuellement stockées dans une table.
Voir aussi Comment insérer avec la clause where
la source
La bonne réponse à cette question sera qc comme ceci:
une). SI vous voulez sélectionner avant l'insertion:
b). Si l'enregistrement existe déjà, utilisez la mise à jour au lieu d'insérer:
Devrait être
c). Si vous souhaitez mettre à jour ou insérer en même temps
ré). Si vous souhaitez CLONE un enregistrement de la même table, rappelez-vous simplement que vous ne pouvez pas sélectionner la table dans laquelle vous insérez par conséquent
Je pense que cela couvre la plupart des scénarios
la source
Vous ne pouvez tout simplement pas utiliser WHERE lors d'une instruction INSERT:
devrait être:
La partie WHERE ne fonctionne que dans les instructions SELECT:
ou dans les instructions UPDATE:
la source
Insérer dans = Ajout de lignes à un tableau
Upate = mettre à jour des lignes spécifiques.
Que décrirait la clause where dans votre encart? Il n'y a rien qui corresponde, la ligne n'existe pas (encore) ...
la source
Vous pouvez effectuer une INSERT conditionnelle en fonction de l'entrée de l'utilisateur. Cette requête ne sera insérée que si les variables d'entrée '$ userWeight' et '$ userDesiredWeight' ne sont pas vides
la source
Cela dépend de la situation INSERT peut en fait avoir une clause where.
Par exemple, si vous faites correspondre les valeurs d'un formulaire.
Cela a du sens, n'est-ce pas?
la source
Le moyen le plus simple consiste à utiliser IF pour violer votre contrainte de clé. Cela ne fonctionne que pour INSERT IGNORE mais vous permettra d'utiliser la contrainte dans un INSERT.
la source
La
WHERE
clause After vous placez une condition et elle est utilisée pour récupérer des données ou pour mettre à jour une ligne. Lorsque vous insérez des données, on suppose que la ligne n'existe pas.Donc, la question est, y a-t-il une ligne dont l'ID est 1? si tel est le cas, utilisez MySQL UPDATE , sinon utilisez MySQL INSERT .
la source
Si vous spécifiez un numéro d'enregistrement particulier pour insérer des données, il est préférable d'utiliser une
UPDATE
instruction plutôt qu'uneINSERT
instruction.Ce type de requête que vous avez écrit dans la question est comme une requête factice.
Votre requête est: -
Ici, vous spécifiez l'id = 1, il vaut donc mieux utiliser l'
UPDATE
instruction pour mettre à jour l'enregistrement existant.Il n'est pas recommandé d'utiliser laWHERE
clause dans le cas deINSERT
.You devrait utiliserUPDATE
.Maintenant en utilisant la requête de mise à jour: -
la source
La réponse est définitivement non.
L'ajout d'une clause WHERE après INSERT INTO ... VALUES ... n'est qu'un SQL non valide et n'analysera pas.
L'erreur renvoyée par MySQL est:
La partie la plus importante du message d'erreur est
qui montre la partie spécifique que l'analyseur ne s'attendait pas à trouver ici: la clause WHERE.
la source
son tout faux. INSERT QUERY n'a pas de clause WHERE, seule UPDATE QUERY l'a. Si vous souhaitez ajouter des données où id = 1, votre requête sera
la source
Non. Pour autant que je sache, vous ne pouvez pas ajouter la clause WHERE dans cette requête. Peut-être que j'ai aussi oublié mon SQL, car je ne sais pas vraiment pourquoi vous en avez besoin de toute façon.
la source
Vous ne devez pas utiliser la condition where dans l'instruction Insert. Si vous le souhaitez, utilisez l'insertion dans une instruction de mise à jour, puis mettez à jour un enregistrement existant.
En fait, puis-je savoir pourquoi vous avez besoin d'une clause where dans l'instruction Insert ??
Peut-être en fonction de la raison pour laquelle je pourrais vous suggérer une meilleure option.
la source
Je pense que votre meilleure option est d'utiliser REPLACE à la place INSERT
la source
LISEZ CECI AUSSI BIEN
Cela n'a pas de sens ... même littéralement
INSERT
signifie ajouter unnew row
et quand vous dites queWHERE
vous définissez de quelle ligne vous parlez dans leSQL
.Ainsi, l'ajout d'une nouvelle ligne n'est pas possible avec une condition sur une ligne existante.
Vous devez choisir parmi les éléments suivants:
A. Utilisez à la
UPDATE
place deINSERT
Utilisez
INSERT
et supprimez laWHERE
clause (je le dis juste ...) ou si vous êtes vraiment obligé d'utiliserINSERT
etWHERE
dans une seule instruction, cela ne peut être fait que via la clause INSERT..SELECT ...Mais cela sert un objectif entièrement différent et si vous avez défini id comme clé primaire, cette insertion sera un échec, sinon une nouvelle ligne sera insérée avec id = 1.
la source
Je suis conscient qu'il s'agit d'un ancien message mais j'espère que cela aidera encore quelqu'un, avec ce que j'espère être un exemple simple:
Contexte:
J'ai eu un cas plusieurs à plusieurs: le même utilisateur est répertorié plusieurs fois avec plusieurs valeurs et je voulais créer un nouvel enregistrement, donc UPDATE n'aurait pas de sens dans mon cas et je devais m'adresser à un utilisateur particulier comme je le ferais en utilisant une clause WHERE.
En utilisant cette construction, vous ciblez en fait un utilisateur spécifique (user123, qui a d'autres enregistrements) donc vous n'avez pas vraiment besoin d'une clause where, je suppose.
la sortie pourrait être:
la source
Une façon d'utiliser INSERT et WHERE est
INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953);
Dans ce cas, c'est comme un test d'existence. Il n'y a pas d'exception si vous l'exécutez deux fois ou plus ...la source
la syntaxe correcte pour l'insertion de mysql dans l'instruction en utilisant la méthode post est:
la source
je ne pense pas que nous pouvons utiliser la clause where dans l'instruction insert
la source
la source
Vous ne pouvez pas utiliser INSERT et WHERE ensemble. Vous pouvez utiliser la clause UPDATE pour ajouter de la valeur à une colonne particulière dans un champ particulier comme le code ci-dessous;
la source
Je pense que la forme correcte pour insérer une valeur sur une ligne spécifiée est:
cela fonctionne et est similaire si vous écrivez sur Microsoft SQL Server
sur mysql, vous devez mettre à jour la table.
la source
Vous pouvez le faire avec le code ci-dessous:
la source