solucion - error 1175 mysql delete
Código de error de MySQL: 1175 durante la ACTUALIZACIÓN en MySQL Workbench (15)
Estoy tratando de actualizar la columna visited
para darle el valor 1. Utilizo el banco de trabajo MySQL y escribo la declaración en el editor de SQL desde el 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 DÓNDE que use una columna CLAVE Para deshabilitar el modo seguro, active la opción ...
Seguí las instrucciones, y desactivé la opción de safe update
en el menú Edit
, luego Preferences
luego en el SQL Editor
. El mismo error sigue apareciendo y no puedo actualizar este valor. Por favor, dime que está mal?
Código de error: 1175. Está utilizando el modo de actualización segura e intentó actualizar una tabla sin un DÓNDE que use una columna CLAVE. Para deshabilitar el modo seguro, alterne la opción en Preferencias -> Editor de SQL y vuelva a conectarse.
Desactivar el "Modo de actualización segura" temporal
SET SQL_SAFE_UPDATES = 0;
UPDATE options SET title= ''kiemvieclam24h'' WHERE url = ''http://kiemvieclam24h.net'';
SET SQL_SAFE_UPDATES = 1;
Desactive el "Modo de actualización segura" para siempre
Mysql workbench 8.0:
MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"
MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
Dado que la pregunta fue respondida y no tuvo nada que ver con actualizaciones seguras, este podría ser el lugar equivocado; Voy a publicar sólo para agregar información.
Intenté 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);
Fracaso. Modificó la actualización a:
update prime_table set field 1 = '''' where id <> 0 and id in (select id from ids);
Eso funciono. Bueno, vaya, si siempre agrego la tecla <> 0 para sortear la comprobación de actualización segura, o incluso si configuro SQL_SAFE_UPDATE = 0, perdí la "verificación" en mi consulta. También podría desactivar la opción de forma permanente. Supongo que hace que eliminar y actualizar un proceso de dos pasos en lugar de uno ... pero si escribe lo suficientemente rápido y deja de pensar que la clave es especial, sino más bien como una molestia ...
En la versión 6.2 de MySQL Workbech no se SQLQueries
opciones de Preferencia de SQLQueries
.
SET SQL_SAFE_UPDATES=0;
Encontré la respuesta. El problema fue 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.
Es cierto, 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'');
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 una operación DELETE
insegura
En la nueva ventana, desmarque la opción Safe updates
Luego cierre y vuelva a abrir la conexión. No es necesario reiniciar el servicio.
Ahora vamos a probar el DELETE
nuevo con resultados exitosos.
Entonces, ¿qué es todo acerca de estas actualizaciones seguras? No es una cosa mala. Esto es lo que dice MySql al respecto.
Usando la opción --safe-updates
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 puede haber emitido una declaraciónDELETE FROM tbl_name
pero se ha olvidado de la cláusulaWHERE
. Normalmente, tal declaración elimina todas las filas de la tabla. Con--safe-updates
, puede eliminar filas solo especificando los valores clave que las identifican. Esto ayuda a prevenir accidentes.Cuando usa la opción
--safe-updates
, 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 trata con la base de datos de producción. De lo contrario, debes tener mucho cuidado de no borrar accidentalmente datos importantes.
La solución más simple es definir el límite de la fila y ejecutar. Esto se hace por razones de seguridad.
Parece que tu sesión de MySql tiene configurada la opción de actualizaciones seguras . Esto significa que no puede actualizar o eliminar registros sin especificar una clave (por ejemplo, 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
en la where clause
).
Si está en un modo seguro, debe proporcionar id en la cláusula where. Así que algo como esto debería funcionar!
UPDATE tablename SET columnname=1 where id>0
Siga los siguientes pasos antes de ejecutar el comando ACTUALIZAR: En MySQL Workbench
- Ir a
Edit
->Preferences
- Haga clic en la pestaña
"SQL Editor"
yuncheck
check box
"Actualizaciones seguras" -
Query
->Reconnect to Server
// cerrar sesión y luego iniciar sesión - Ahora ejecuta tu consulta SQL
ps, no es necesario reiniciar el demonio de MySQL!
Todo lo que se necesita es: iniciar una nueva consulta y ejecutar:
SET SQL_SAFE_UPDATES = 0;
Luego: Ejecute la consulta que estaba intentando ejecutar que no funcionaba anteriormente.
No es necesario establecer SQL_SAFE_UPDATES en 0 , realmente lo desalentaría a hacerlo de esa manera. Simplemente agregue en la cláusula WHERE un valor KEY que coincida con todo, como una clave primaria comparada 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 cada registro se actualiza como espera.
SET SQL_SAFE_UPDATES=0;
O
Ir a Edit --> Preferences
Haga clic en la pestaña SQL Queries
y desactive la casilla de verificación Safe Updates
Query --> Reconnect to Server
Ahora ejecuta tu consulta sql
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;