Código de error de MySQL: 1175 durante la ACTUALIZACIÓN en MySQL Workbench

Estoy tratando de actualizar la columna. visited para darle el valor 1. Uso el banco de trabajo MySQL y estoy escribiendo la declaración en el editor SQL desde dentro del banco de trabajo. Estoy escribiendo el siguiente comando:

UPDATE tablename SET columnname=1;

Me da el siguiente error:

Está utilizando el modo de actualización segura e intentó actualizar una tabla sin un DONDE que usa una columna CLAVE Para deshabilitar el modo seguro, cambie la opción ...

Seguí las instrucciones y desmarqué la safe update Opción de la Edit menú entonces Preferences luego SQL Editor. Sigue apareciendo el mismo error y no puedo actualizar este valor. Por favor, dime ¿qué está mal?

preguntado el 12 de julio de 12 a las 09:07

¿Eres consciente de que esto se actualizará? todos filas en su tabla donde visitó = 0 para convertirse en visitado = 1? ¿Es esto lo que quieres? -

Después de desmarcar "Actualizaciones seguras", siga el siguiente paso: Consulta --> Reconectar con el servidor. Ahora ejecute su consulta -

Debe volver a conectarse al servidor MySQL (reiniciar la conexión MySQL) antes de que este cambio surta efecto. -

23 Respuestas

Parece que su sesión de MySql tiene el opción de actualizaciones seguras colocar. Esto significa que no puede actualizar ni eliminar registros sin especificar una clave (p. primary key) en la cláusula where.

Tratar:

SET SQL_SAFE_UPDATES = 0;

O puede modificar su consulta para seguir la regla (use primary key in where clause).

respondido 25 mar '15, 19:03

Asegúrese de configurar esto de nuevo con SET SQL_SAFE_UPDATES = 1 cuando haya terminado, ya que es una característica de seguridad que vale la pena. - AccionesB

Gracias por mantenerlo simple. - subham-sood

Y si SQL_SAFE_UPDATES ya estaba apagado? entonces llamando SET SQL_SAFE_UPDATES = 0 lo apagaría (nuevamente), pero siguiéndolo con SET SQL_SAFE_UPDATES = 1 terminaría encendiéndolo para el resto del script, presumiblemente incluso anulando los valores predeterminados configurados. tal vez usando @@SQL_SAFE_UPDATES para leer el valor actual, entonces restaurar el valor anterior después de las palabras sería un mejor enfoque? - David Wohlferd

He accedido a esta respuesta más que a cualquier otra respuesta en SO, debería obtener un premio especial o debería memorizar esto. - kevin lana

Siga los siguientes pasos antes de ejecutar el comando ACTUALIZAR: En MySQL Workbench

  1. Ve a Edit -> Preferences
  2. Haga clic "SQL Editor" pestaña y uncheck "Actualizaciones seguras" check box
  3. Query -> Reconnect to Server // cerrar sesión y luego iniciar sesión
  4. Ahora ejecuta tu consulta SQL

ps, ¡No es necesario reiniciar el demonio MySQL!

Respondido 05 Abr '18, 10:04

Para la versión 6.3, el paso 2 debe ser "Sql Editor" en lugar de "Sql Queries" y luego hay una casilla de verificación en la parte inferior para "Safe Updates" - meconroy

no hay preferencias en el menú de edición en mi banco de trabajo - Berliano

Esto fue útil. Gracias. - Swapnadeep Mukherjee

por cierto, si no puede ver la opción "Modo seguro", intente cambiar el tamaño del cuadro de diálogo haciendo clic, manteniendo presionada la esquina inferior derecha y tirando. En Ubuntu, estas opciones estaban ocultas en una pantalla de 1920x1080. - Pablo Preibisch

SET SQL_SAFE_UPDATES = 0;

# your code SQL here

SET SQL_SAFE_UPDATES = 1;

Respondido 30 ago 20, 21:08

pls podría marcar esta respuesta como correcta? Gracias :) - pablocom96

SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;

respondido 05 mar '15, 06:03

No es necesario establecer SQL_SAFE_UPDATES en 0, realmente lo desaconsejaría hacerlo de esa manera. SAFE_UPDATES está activado de forma predeterminada por una RAZÓN. Puede conducir un automóvil sin cinturones de seguridad y otras cosas si sabe a lo que me refiero;) Simplemente agregue en la cláusula WHERE un valor CLAVE que coincida con todo, como una clave principal en comparación con 0, así que en lugar de escribir:

UPDATE customers SET countryCode = 'USA'
    WHERE country = 'USA';               -- which gives the error, you just write:

UPDATE customers SET countryCode = 'USA'
    WHERE (country = 'USA' AND customerNumber <> 0); -- Because customerNumber is a primary key you got no error 1175 any more.

Ahora puede estar seguro de que todos los registros (SIEMPRE) se actualizan como espera.

Respondido 05 Feb 19, 03:02

Jaja, ese es un buen truco. solía WHERE id > 0 como un truco en esta línea. - Csaba Toth

No me funciona, me sigue mostrando el mismo Mensaje. Lo resolví desactivando el modo de actualización segura: -Editar -> Preferencias -> Editor Sql y luego desmarcar Actualización segura. - Abdel Hadi Lahlou

Sin embargo, ¿cómo es que esto realmente lo hace más seguro? - mate messersmith

Cualquier otro comentario aquí es engañoso y ha logrado informarnos por qué ocurrió la solución en lugar de cómo evitarla. También hubiera sido genial si hubiera mencionado por qué la consulta es segura ahora al incluir la columna de clave principal en la cláusula where (aunque se puede buscar en Google). Muchas gracias ;) - Akhil

@MattMessersmith Esta característica intenta evitar que realice una actualización/eliminación en función de una columna que no sea clave que pueda afectar (por lo tanto, cambiar o eliminar accidentalmente) la mayoría o todas sus filas. La sugerencia de esta respuesta no hace que la consulta sea más segura, es una solución para eludir una característica de seguridad útil sin deshabilitarla permanentemente. Esta solución no es para código de producción, sino para consultas que ejecuta a mano. Al hacerlo de esta manera, la función de seguridad lo hace consciente del impacto de la consulta cuando la escribe. - totymedli

Todo lo que se necesita es: Inicie una nueva consulta y ejecute:

SET SQL_SAFE_UPDATES = 0;

Luego: Ejecute la consulta que estaba tratando de ejecutar y que no funcionaba anteriormente.

Respondido el 08 de diciembre de 16 a las 06:12

Bienvenido a SO, asegúrese de leer el página de gira e página de ayuda, y evite publicar respuestas como esta porque muchas respuestas debajo de esta dicen exactamente lo mismo y se publicaron hace meses: Herido Steven Jones

También puede habilitar esta opción nuevamente después de ejecutar la consulta. - KTA

¿Qué agrega esta respuesta? Acabas de publicar lo mismo que Habibillah, más de dos años después. ¿Tratando de cosechar karma? - Luc

Código de error: 1175. Está utilizando el modo de actualización seguro e intentó actualizar una tabla sin un DONDE que usa una columna CLAVE Para deshabilitar el modo seguro, cambie la opción en Preferencias -> Editor SQL y vuelva a conectarse.

Apague el "Modo de actualización segura" temporalmente

SET SQL_SAFE_UPDATES = 0;
UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net';
SET SQL_SAFE_UPDATES = 1;

Apague el "Modo de actualización segura" para siempre

banco de trabajo mysql 8.0:

MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"

enter image description here La versión anterior puede:

MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]

Respondido 31 Jul 18, 10:07

  1. Preferencias ...
  2. "Actualizaciones seguras"...
  3. Reiniciar el servidor

Preferencias ...

Actualizaciones seguras Reiniciar el servidor

Respondido 19 Feb 16, 17:02

Esta debería haber sido la respuesta aceptada. Es una pena que no lo haya sido. Detector de errores

No debería tener que reiniciar el servidor. Debería ser suficiente simplemente cerrar y volver a abrir la conexión. - Marc L.

En MAC, las preferencias se encuentran en el menú superior de MySQLWorkbench. - zwitterión

SET SQL_SAFE_UPDATES=0;

OR

Ve a Edit --> Preferences

Haga clic SQL Queries pestaña y desmarcar Safe Updates casilla de verificación

Query --> Reconnect to Server

Ahora ejecuta tu consulta sql

Respondido 04 Feb 14, 11:02

Si está en un modo seguro, debe proporcionar una identificación en la cláusula where. ¡Así que algo como esto debería funcionar!

UPDATE tablename SET columnname=1 where id>0

Respondido el 11 de Septiembre de 15 a las 10:09

Esta página confirma este hecho: bennadel.com/blog/… - DivDif

En caso de eliminación DELETE FROM tablename WHERE id > 0 obras. Gracias - metafaniel

En WorkBench lo resolví desactivando el modo de actualización segura:

-Editar -> Preferencias -> Editor Sql y luego desmarque Actualización segura.

contestado el 20 de mayo de 19 a las 11:05

La solución más simple es definir el límite de filas y ejecutar. Esto se hace por motivos de seguridad.

Respondido 30 Oct 15, 08:10

+1 en esta solución. Eliminar de la TABLA donde columna = límite 'xyz' 9999999999 - volandocebra1

Esta respuesta debería ser la respuesta aceptada porque es la forma menos insegura. - Juliano

Encontré la respuesta. El problema era que tengo que preceder al nombre de la tabla con el nombre del esquema. es decir, el comando debe ser:

UPDATE schemaname.tablename SET columnname=1;

Gracias a todos.

Respondido 25 Jul 13, 06:07

Puede evitar mencionar el nombre del esquema seleccionando el esquema en el panel izquierdo. Seleccionar esquema en el panel izquierdo significa que está utilizando el esquema/base de datos seleccionado - Ripon Al Wasim

Esta no es la respuesta para resolver el problema descrito en la pregunta (y el título). Debes marcar otro como aceptado. - T30

Intenté con schemanname pero obtuve el mismo error, actualice qms-active-db.gh_table establecer marcador = '1660_207100000001000' - vikas yadav

¡Esta no es la respuesta! - Ezequiel Víctor

respuesta incorrecta, la respuesta correcta es respondida por Habibillah (abajo) - Hariharan s

En la versión 6.2 de MySQL Workbech, no salga de la PreferenciaSQLQueries.

En este caso es posible el uso: SET SQL_SAFE_UPDATES=0;

Respondido el 10 de Septiembre de 14 a las 20:09

Existe, pero la opción está ahora en "Editor de SQL". - Philip Olson

No veo esta opción. Por favor, puede obtener una captura de pantalla. Gracias - ferdiado

Abra Preferencias --> pestaña Editor SQL --> En la parte inferior. Una versión 6.2-beta carecía de esta opción, por lo que quizás deba actualizar a 6.2.3+. - Philip Olson

mi versión es 6.3, está bajo -> Editor SQL -> Otro - usuario4985526

Dado que la pregunta fue respondida y no tenía nada que ver con actualizaciones seguras, este podría ser el lugar equivocado; Publicaré solo para agregar información.

Traté de ser un buen ciudadano y modifiqué la consulta para usar una tabla temporal de ID que se actualizaría:

create temporary table ids ( id int )
    select id from prime_table where condition = true;
update prime_table set field1 = '' where id in (select id from ids);

Falla. Modificado la actualización a:

update prime_table set field1 = '' where id <> 0 and id in (select id from ids);

Eso funciono. Vaya, si siempre agrego where key <> 0 para sortear la comprobación de actualización segura, o incluso establecer SQL_SAFE_UPDATE=0, entonces he perdido la 'comprobación' en mi consulta. También podría desactivar la opción de forma permanente. Supongo que hace que borrar y actualizar sea un proceso de dos pasos en lugar de uno... pero si escribes lo suficientemente rápido y dejas de pensar en que la clave es especial sino simplemente una molestia...

contestado el 13 de mayo de 20 a las 19:05

Yo también tuve el mismo problema, pero cuando desactivo las 'actualizaciones seguras' en Editar -> Preferencias -> Editor de SQL -> Actualizaciones seguras, sigo enfrentando el error como "Código de error 1175 deshabilitar el modo seguro"

Mi solución para este error es solo dar la clave principal de la tabla si no se proporciona y actualizar la columna usando el valor de esa clave principal.

P.ej: ACTUALIZAR [nombre de la tabla] SET Columna_vacia = 'Valor' ¿Dónde? [nombre de columna de clave principal] = valor;

Respondido el 07 de Septiembre de 20 a las 17:09

En mi caso, solo tengo esta parte "Para deshabilitar el modo seguro, cambie la opción en Preferencias -> Editor SQL y vuelva a conectarse". no entiendo porque Gracias por el consejo - Lewis86

Es cierto que esto no tiene sentido para la mayoría de los ejemplos. Pero finalmente, llegué a la siguiente declaración y funciona bien:

update tablename  set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');

Respondido 10 Oct 15, 12:10

Esto es para Mac, pero debe ser igual para otros sistemas operativos excepto la ubicación de las preferencias.

El error que obtenemos cuando intentamos un inseguro DELETE Inteligente

Haga clic en preferencias cuando reciba este error

En la nueva ventana, desmarque la opción Safe updates

Desmarque las actualizaciones seguras

Luego cierre y vuelva a abrir la conexión. No es necesario reiniciar el servicio.

Ahora vamos a probar el DELETE de nuevo con resultados exitosos.

enter image description here

Entonces, ¿qué es todo acerca de estas actualizaciones seguras? No es algo malo. Esto es lo que dice MySql al respecto.

Usando el --safe-updates Optión

Para los principiantes, una opción de inicio útil es --safe-updates (o --i-am-a-dummy, que tiene el mismo efecto). Es útil para los casos en los que podría haber emitido un DELETE FROM tbl_name declaración pero olvidé el WHERE cláusula. Normalmente, tal declaración elimina todas las filas de la tabla. Con --safe-updates, solo puede eliminar filas especificando los valores clave que las identifican. Esto ayuda a prevenir accidentes.

Cuando se utiliza el --safe-updates opción, mysql emite la siguiente declaración cuando se conecta al servidor MySQL:

SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;

Es seguro activar esta opción mientras se ocupa de la base de datos de producción. De lo contrario, debe tener mucho cuidado de no borrar accidentalmente datos importantes.

Respondido 05 Jul 18, 08:07

simplemente escriba SET SQL_SAFE_UPDATES = 0; antes de eliminar o actualizar y volver a establecer en 1 SET SQL_SAFE_UPDATES = 1

Respondido 26 ago 20, 15:08

Si tiene este problema en un procedimiento almacenado y no puede usar la clave en la cláusula WHERE, puede resolverlo declarando una variable que contendrá el límite de las filas que deben actualizarse y luego usarla. en la consulta de actualización/eliminación.

DELIMITER $
CREATE PROCEDURE myProcedure()
BEGIN
    DECLARE the_limit INT;

    SELECT COUNT(*) INTO the_limit
    FROM my_table
    WHERE my_column IS NULL;
        
    UPDATE my_table
    SET my_column = true
    WHERE my_column IS NULL
    LIMIT the_limit;
END$

Respondido 09 Oct 20, 03:10

Como se indicó en publicaciones anteriores, cambiar la configuración predeterminada del servidor de la base de datos dará como resultado una modificación no deseada de los datos existentes debido a una consulta incorrecta de los datos en un proyecto publicado. Por lo tanto, para implementar dichos comandos como se indicó en publicaciones anteriores, es necesario ejecutarlos en un entorno de prueba en datos de muestra y luego ejecutarlos después de probarlos correctamente.

Mi sugerencia es escribir un WHERE instrucción condicional que recorrerá todas las filas en todas las condiciones si una actualización debería funcionar para todas las filas de una tabla. Por ejemplo, si la tabla contiene un valor de ID, la condición ID > 0 se puede utilizar para seleccionar todas las filas:

/**
 * For successful result, "id" column must be "Not Null (NN)" and defined in
 * INT data type. In addition, the "id" column in the table must have PK, UQ
 * and AI attributes.
 */
UPDATE schema_name.table_name
SET first_column_name = first_value, second_column_name = second_value, ...
WHERE id > 0;

Si la tabla no contiene una columna de identificación, la operación de actualización se puede ejecutar en todas las filas al marcar una columna que no puede ser nula:

/**
 * "first_column_name" column must be "Not Null (NN)" for successful result.
 */
UPDATE schema_name.table_name
SET first_column_name = first_value, second_column_name = second_value, ...
WHERE table_name.first_column_name IS NOT NULL;

respondido 06 nov., 21:03

MySql Workbench me dio el mismo error, después de que desmarqué el modo seguro, luego volví a conectar el servidor y la función de actualización funcionó. Vaya a Consulta en la barra de menú y vuelva a conectar el servidor

Menú Consulta -> Reconectar al servidor

Respondido el 08 de enero de 22 a las 11:01

Primero: asegúrese de que desea actualizar todos los registros en esa tabla porque sin la cláusula where es peligroso actualizar todos los registros en esa tabla. Es raro que desee actualizar todos los registros de la tabla.

la mayoría de las veces desea actualizar registros específicos que deben incluir la cláusula Where si nuevamente desea actualizar todos los registros, abra MySQL Workbench> Edit> Preference> SQL Editor> desplácese hacia abajo a la derecha y desmarque "Actualizaciones seguras (rechaza ACTUALIZACIONES y ELIMINACIONES con sin restricciones)".

Es para actualizaciones seguras.

Si desmarca lo dicho anteriormente, hay posibilidades de que actualice todos los registros en lugar de un registro, lo que conduce a una restauración de la copia de seguridad de la base de datos. no hay reversión.

Respondido 15 Feb 22, 08:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.