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

817

Estoy tratando de actualizar la columna visitedpara darle el valor 1. Uso MySQL Workbench, y estoy escribiendo la declaración en el editor de SQL desde dentro del Workbench. 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 DÓNDE que usa una columna CLAVE Para deshabilitar el modo seguro, active la opción ...

He seguido las instrucciones, y que yo no se la safe updateopción en el Editmenú y luego Preferencesa continuación SQL Editor. Sigue apareciendo el mismo error y no puedo actualizar este valor. Por favor, dime ¿qué pasa?

Jurado A
fuente
44
¿Sabe que esto actualizará todas las filas de su tabla donde se visitó = 0 para convertirse en visitado = 1? ¿Es esto lo que quieres?
Mark Byers
23
Después de desmarcar "Actualizaciones seguras", siga el siguiente paso: Consulta -> Volver a conectar al servidor. Ahora ejecute su consulta
Ripon Al Wasim
55
Debe volver a conectarse al servidor MySQL (reiniciar la conexión MySQL) antes de que este cambio surta efecto.
Philip Olson el

Respuestas:

1613

Parece que su sesión MySql tiene configurada la opción de actualizaciones seguras . Esto significa que no puede actualizar o eliminar registros sin especificar una clave (ej. primary key) En la cláusula where.

Tratar:

SET SQL_SAFE_UPDATES = 0;

O puede modificar su consulta para seguir la regla (usar primary keyen where clause).

Habibillah
fuente
Mencioné que ya había deshabilitado la opción de actualización segura de la GUI que tiene el mismo efecto que la identificación. Escribí el comando. Sin embargo, gracias por su respuesta, pero ya respondí mi pregunta. Comprueba mi respuesta para saber cuál fue el problema.
Jurado A
8
Una vez que cambie la opción en la GUI, debe volver a conectarse a la base de datos para que la configuración se establezca correctamente.
Tim Koscielski
31
Asegúrese de configurar esto nuevamente SET SQL_SAFE_UPDATES = 1cuando haya terminado, ya que es una característica de seguridad que vale la pena.
StockB
44
No estoy de acuerdo con StockB ... Es posible que desee mantenerlo encendido mientras mejora el uso de SQL ... pero una vez que sabe lo que está haciendo ... esa cosa es completamente inútil. No deberías estar desarrollando tus cosas en un servidor de producción de todos modos, así que incluso si te equivocas, lo único que deberías estar rompiendo es tu servidor de desarrollo ... que a nadie le importa de todos modos.
Mathieu Turcotte
3
Solo vine a decir que busqué esta publicación como 20 veces en los últimos 6 meses, ya que siempre tuve esta opción como falsa durante 11 años, pero ahora estoy trabajando en una empresa con este conjunto en desarrollo y producción. Hay muchas razones para establecerlo en 0 de forma predeterminada, por ejemplo, cuando desarrolla funciones independientes que puede exportar a csv directamente y luego lo marca como exportado o algo similar. Otras veces es molesto debido a las actualizaciones globales que obviamente no tienen ningún filtro pk. Lo veo más como una protección novata que como una característica realmente útil.
JoelBonetR
455

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

  1. Ir a Edit->Preferences
  2. Haga clic en la "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 ejecute su consulta SQL

ps, no es necesario reiniciar el demonio MySQL!

Ripon Al Wasim
fuente
20
Para la versión 6.3, el paso 2 debería ser en "Sql Editor"lugar de "Sql Queries"y luego hay una casilla de verificación en la parte inferior para"Safe Updates"
meconroy
1
si es una cosa única, te sugiero que lo vuelvas a encender, ya que esto hace que sea muy fácil acumular tus datos si no tienes cuidado
Frankenmint
2
gracias conroy Por un tiempo no pude ver esa caja. Solo tuve que agrandar la ventana.
arn-arn
Tal vez lo movieron, pero en MySQL Workbench 6.0, está bajo "Consultas SQL", no "Editor SQL"
MPelletier
1
Sí, lo mismo aquí, tuve que desplazarme un poco hacia abajo para verlo.
Elon Zito
167
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
usuario2531028
fuente
44
desafortunadamente, las otras soluciones basadas en consultas no funcionaron para mí. ¡Pero este sí! Le agradezco que haya agregado una línea para volver a activar las actualizaciones seguras.
SherylHohman el
1
Realmente me gusta este, ya que probablemente sea el más general de todos, sin dejar de ser seguro.
Nae
117

No es necesario establecer SQL_SAFE_UPDATES en 0 , realmente lo desaliento para que lo haga de esa manera. SAFE_UPDATES está activado por defecto por un MOTIVO. Puede conducir un automóvil sin cinturones de seguridad y otras cosas si sabe a lo que me refiero;) Solo agregue en la cláusula WHERE un valor KEY que coincida con todo, como una clave principal en comparación con 0, por lo 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 cada registro se actualiza (SIEMPRE) como espera.

Rudy De Volder
fuente
3
Esto es genial!
Amos Long
respuesta apreciada: +1
Asif Raza
2
Jaja, ese es un buen truco. Lo usé WHERE id > 0como un truco en esta línea.
Csaba Toth
No me funciona, sigue mostrándome el mismo mensaje. Lo resolví Desactivando el modo de actualización segura haciendo lo siguiente: -Editar -> Preferencias -> Editor SQL y luego desmarcar Actualización segura.
Abdelhadi Lahlou
2
Sin embargo, ¿cómo es que esto lo hace más seguro?
Matt Messersmith
107

Todo lo que se necesita es: iniciar una nueva consulta y ejecutar:

SET SQL_SAFE_UPDATES = 0;

Luego: ejecute la consulta que intentaba ejecutar que no funcionaba anteriormente.

Quagmire12
fuente
77
Bienvenido a SO, asegúrese de leer la página de recorrido y la página de ayuda y respuestas Evita publicar como éste, porque muchas respuestas por debajo de éste dicen exactamente lo mismo y se han publicado hace unos meses
WOUNDEDStevenJones
1
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
71

SET SQL_SAFE_UPDATES = 0;

su código SQL aquí

SET SQL_SAFE_UPDATES = 1;

Carlos Henrique Moreira Dos S.
fuente
66

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

Desactiva 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;

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

Mysql workbench 8.0:

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

ingrese la descripción de la imagen aquí La versión anterior puede:

MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
Tính Ngô Quang
fuente
41
  1. Preferencias ...
  2. "Actualizaciones seguras" ...
  3. Reiniciar servidor

Preferencias ...

Actualizaciones seguras Reiniciar servidor

Andrés
fuente
Esta debería haber sido la respuesta aceptada. Es una pena que no lo haya sido
ErrorrrDetector
1
No debería tener que reiniciar el servidor. Debería ser suficiente simplemente cerrar y volver a abrir la conexión.
Marc L.
1
En MAC, las preferencias se encuentran en el menú superior de MySQLWorkbench.
zwitterion
36
SET SQL_SAFE_UPDATES=0;

O

Ir Edit --> Preferences

Haga clic en la SQL Queries pestaña y desmarque la casilla de Safe Updates verificación

Query --> Reconnect to Server

Ahora ejecute su consulta sql

Balu
fuente
26

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

UPDATE tablename SET columnname=1 where id>0
Tomislav
fuente
1
Esta página confirma este hecho: bennadel.com/blog/…
DivDiff
20

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

-Editar -> Preferencias -> Editor SQL y luego desmarcar Actualización segura.

Abdelhadi Lahlou
fuente
77
Esto funciona pero tuve que reiniciar MySQL Workbench.
Lanil Marasinghe
17

Encontré la respuesta. El problema era que tenía 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.

Jurado A
fuente
55
Puede evitar mencionar el nombre del esquema seleccionando el esquema en el panel izquierdo. Seleccionar el esquema en el panel izquierdo significa que está utilizando el esquema / base de datos seleccionado
Ripon Al Wasim
10
Esta no es la respuesta para resolver el problema descrito en la pregunta (y el título). Debe marcar a otro como aceptado.
T30
Intenté con el esquema pero obteniendo el mismo error, actualice qms-active-db.gh_table set bookmark = '1660_207100000001000'
Code_Mode
3
Esta no es la respuesta!
Ezequiel Victor
1
respuesta incorrecta, la respuesta correcta es respondida por Habibillah (abajo)
hariharan s
14

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

En este caso es posible usar: SET SQL_SAFE_UPDATES=0;

ferdiado
fuente
1
Existe, pero la opción está en "Editor SQL" ahora.
Philip Olson el
No veo esta opción Por favor, puedes obtener una captura de pantalla. Gracias
ferdiado
Abra Preferencias -> pestaña Editor de 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
tyan
12

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

Ruwantha
fuente
2
+1 en esta solución. Eliminar de la TABLA donde column = 'xyz' limit 9999999999
FlyingZebra1
2
Esta respuesta debe ser la respuesta aceptada porque es la forma menos insegura.
Julián
7

Como 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 identificadores que se actualizarían:

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);

Fracaso. Modificó la actualización a:

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

Eso funciono. Bueno, si siempre estoy agregando donde la tecla <> 0 para evitar la verificación de actualización segura, o incluso establezco SQL_SAFE_UPDATE = 0, entonces he perdido el 'cheque' en mi consulta. También podría desactivar la opción de forma permanente. Supongo que elimina y actualiza un proceso de dos pasos en lugar de uno ... pero si escribe lo suficientemente rápido y deja de pensar en que la clave es especial, sino más bien como una molestia ...

Gerard ONeill
fuente
4

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');
Sonic-Mayhem
fuente
3

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

El error que obtenemos cuando intentamos una DELETEoperación insegura

Haga clic en las preferencias cuando reciba este error

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

Desmarca las actualizaciones seguras

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

Ahora vamos a intentarlo DELETEnuevamente con resultados exitosos.

ingrese la descripción de la imagen aquí

Entonces, ¿de qué se trata esta actualización segura? No es una cosa malvada. Esto es lo que dice MySql al respecto.

Usando la --safe-updatesOpció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 casos en los que podría haber emitido una DELETE FROM tbl_namedeclaración pero olvidó la WHEREcláusula. Normalmente, dicha declaración elimina todas las filas de la tabla. Con--safe-updates , puede eliminar filas solo especificando los valores clave que los identifican. Esto ayuda a prevenir accidentes.

Cuando usa la --safe-updatesopció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 maneja la base de datos de producción. De lo contrario, debe tener mucho cuidado de no eliminar accidentalmente datos importantes.

Krishnadas PC
fuente