¿Qué hay de malo en esta consulta?
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Funciona sin la WHERE
cláusula. Parece que olvidé mi SQL ...
MySQL INSERT Syntax no es compatible con la cláusula WHERE, por lo que su consulta tal como está, fallará. Asumiendo que su id
columna es clave única o primaria:
Si está intentando insertar una nueva fila con ID 1, debería estar usando:
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
Si está intentando cambiar los valores de peso / peso deseado para una fila existente con ID 1, debería usar:
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;
Si lo desea, también puede usar INSERT .. ON DUPLICATE KEY sintaxis de esta manera:
INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
O incluso así:
INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
También es importante tener en cuenta que si su id
columna es una columna de autoincremento, también podría omitirla de su INSERTAR y dejar que mysql la incremente de manera normal.
If you're trying to insert a new row with ID 1 you should be using
INSERTAR EN. En su caso, está intentando insertar cuando la ID 1 ya existe y es una clave primaria o única y falla, por lo que debe usar la sintaxis ACTUALIZAR o INSERTAR ...No puede combinar una cláusula WHERE con una cláusula VALUES. Tienes dos opciones, que yo sepa,
INSERTAR especificando valores
INSERTAR usando una instrucción SELECT
fuente
Utiliza la cláusula WHERE para consultas de ACTUALIZACIÓN. Cuando INSERTAS, estás asumiendo que la fila no existe.
La declaración del OP se convertiría en;
En MySQL, si desea INSERTAR o ACTUALIZAR, puede usar la consulta REPLACE con una cláusula WHERE. Si el DONDE no existe, INSERTA; de lo contrario, ACTUALIZA.EDITAR
Creo que el punto de Bill Karwin es lo suficientemente importante como para salir de los comentarios y hacerlo muy obvio. Gracias Bill, ha pasado mucho tiempo desde que trabajé con MySQL, recordé que tenía problemas con REPLACE, pero olvidé cuáles eran. Debería haberlo buscado.
Así no es como funciona el REEMPLAZO de MySQL. Hace un DELETE (que puede ser un no-op si la fila no existe), seguido de un INSERT. Piensa en las consecuencias vis. disparadores y dependencias de clave externa. En su lugar, use INSERTAR ... EN ACTUALIZACIÓN CLAVE DUPLICADA.
fuente
No creo que el inserto tenga una cláusula WHERE.
fuente
Insertar consulta no admite dónde palabra clave *
Las condiciones se aplican porque puede usar la condición where para las declaraciones de subselección. Puede realizar inserciones complicadas utilizando sub-selecciones.
Por ejemplo:
Al colocar una "selección" en la instrucción de inserción, puede realizar múltiples inserciones rápidamente.
Con este tipo de inserción, es posible que desee verificar el número de filas que se están insertando. Puede determinar el número de filas que se insertarán ejecutando la siguiente instrucción SQL antes de realizar la inserción.
Puede asegurarse de no insertar información duplicada utilizando la condición EXISTS.
Por ejemplo, si tuviera una tabla llamada clientes con una clave primaria de client_id, podría usar la siguiente instrucción:
Esta declaración inserta múltiples registros con una subselección.
Si desea insertar un solo registro, puede usar la siguiente instrucción:
El uso de la tabla dual le permite ingresar sus valores en una declaración de selección, aunque los valores no estén actualmente almacenados en una tabla.
Consulte también Cómo insertar con la cláusula where
fuente
La respuesta correcta a esta pregunta será algo así:
una). SI desea seleccionar antes de insertar:
si). Si ya existe el registro, use la actualización en lugar de insertar:
Debiera ser
C). Si desea actualizar o insertar al mismo tiempo
re). Si desea CLONAR un registro de la MISMA tabla, solo recuerde que no puede seleccionar de la tabla en la que está insertando
Creo que esto cubre la mayoría de los escenarios.
fuente
Simplemente no puede usar WHERE al hacer una instrucción INSERT:
debiera ser:
La parte WHERE solo funciona en las instrucciones SELECT:
o en las declaraciones de ACTUALIZACIÓN:
fuente
Insertar en = Agregar filas a una tabla
Upate = actualizar filas específicas.
¿Qué describiría la cláusula where en su inserción? No tiene nada que coincida, la fila no existe (todavía) ...
fuente
Puede hacer INSERT condicional según la entrada del usuario. Esta consulta solo se insertará si la entrada vars '$ userWeight' y '$ userDesiredWeight' no están en blanco
fuente
Depende de la situación INSERT puede tener una cláusula where.
Por ejemplo, si está haciendo coincidir valores de un formulario.
Tiene sentido, ¿no?
fuente
La forma más simple es usar IF para violar una restricción clave. Esto solo funciona para INSERT IGNORE pero le permitirá usar restricciones en un INSERT.
fuente
Después de la
WHERE
cláusula, se establece una condición y se utiliza para buscar datos o para actualizar una fila. Cuando inserta datos, se supone que la fila no existe.Entonces, la pregunta es, ¿hay alguna fila cuya identificación sea 1? si es así, use ACTUALIZACIÓN MySQL , de lo contrario use INSERT MySQL .
fuente
Si está especificando un registro particular no para insertar datos, es mejor usar una
UPDATE
declaración en lugar de unaINSERT
declaración.Este tipo de consulta que ha escrito en la pregunta es como una consulta ficticia.
Su consulta es: -
Aquí, está especificando id = 1, por lo que es mejor que use la
UPDATE
instrucción para actualizar el registro existente. No se recomienda usar unaWHERE
cláusula en el caso deINSERT
. Debe usarUPDATE
.Ahora usando la consulta de actualización: -
fuente
La respuesta es definitivamente no.
Agregar una cláusula WHERE después de INSERT INTO ... VALUES ... es solo SQL no válido y no se analizará.
El error devuelto por MySQL es:
La parte más importante del mensaje de error es
que muestra la parte específica que el analizador no esperaba encontrar aquí: la cláusula WHERE.
fuente
Está totalmente mal. INSERTAR CONSULTA no tiene una cláusula WHERE, solo ACTUALIZAR CONSULTA la tiene. Si desea agregar datos donde id = 1, entonces su consulta será
fuente
No. Hasta donde sé, no puede agregar la cláusula WHERE en esta consulta. Tal vez también he olvidado mi SQL, porque de todos modos no estoy realmente seguro de por qué lo necesitas.
fuente
No debe usar la condición where en la instrucción Insert. Si desea hacerlo, use insertar en una declaración de actualización y luego actualice un registro existente.
En realidad, ¿puedo saber por qué necesita una cláusula where en la instrucción Insert?
Tal vez en base a la razón por la que podría sugerirle una mejor opción.
fuente
Creo que su mejor opción es usar REPLACE en lugar de INSERT
fuente
LEA ESTO BIEN
No tiene sentido ... incluso literalmente
INSERT
significa agregar aynew row
cuando diceWHERE
que define de qué fila está hablando en elSQL
.Por lo tanto, no es posible agregar una nueva fila con una condición en una fila existente.
Tienes que elegir entre los siguientes:
A. Usar en
UPDATE
lugar deINSERT
B. Use
INSERT
y elimine laWHERE
cláusula (solo lo digo ...) o si está realmente obligado a usarINSERT
yWHERE
en una sola declaración, solo se puede hacer a través de la cláusula INSERT..SELECT ...Pero esto tiene un propósito completamente diferente y si ha definido la identificación como Clave primaria, esta inserción será un error; de lo contrario, se insertará una nueva fila con id = 1.
fuente
Soy consciente de que esta es una publicación antigua, pero espero que esto ayude a alguien, con lo que espero sea un simple ejemplo:
antecedentes:
Tuve un caso de muchos a muchos: el mismo usuario aparece varias veces con múltiples valores y quería crear un nuevo registro, por lo tanto, ACTUALIZAR no tendría sentido en mi caso y necesitaba dirigirme a un usuario en particular tal como lo haría usando una cláusula WHERE.
Al usar esta construcción, en realidad se dirige a un usuario específico (user123, que tiene otros registros), por lo que realmente no necesita una cláusula where, supongo.
la salida podría ser:
fuente
Una forma de usar INSERT y WHERE es
INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953);
En este caso es como una prueba de existencia. No hay excepción si lo ejecuta dos o más veces ...fuente
La sintaxis correcta para la inserción de mysql en la declaración utilizando el método de publicación es:
fuente
no creo que podamos usar la cláusula where en la instrucción insert
fuente
fuente
No puedes usar INSERT y WHERE juntos. Puede usar la cláusula UPDATE para agregar valor a una columna en particular en un campo en particular, como el siguiente código;
fuente
Creo que la forma correcta de insertar un valor en una fila específica es:
funciona y es similar si escribe en Microsoft SQL Server
en mysql tienes que actualizar la tabla.
fuente
Puede hacerlo con el siguiente código:
fuente