Code d'erreur MySQL: 1175 lors de la MISE À JOUR dans MySQL Workbench

817

J'essaie de mettre à jour la colonne visitedpour lui donner la valeur 1. J'utilise le plan de travail MySQL et j'écris l'instruction dans l'éditeur SQL depuis l'intérieur du plan de travail. J'écris la commande suivante:

UPDATE tablename SET columnname=1;

Cela me donne l'erreur suivante:

Vous utilisez le mode de mise à jour sans échec et vous avez essayé de mettre à jour une table sans WHERE qui utilise une colonne KEY Pour désactiver le mode sans échec, basculez l'option ....

J'ai suivi les instructions, et je décoché l' safe updateoption dans le Editmenu , puis Preferencesensuite SQL Editor. La même erreur apparaît toujours et je ne suis pas en mesure de mettre à jour cette valeur. S'il vous plaît, dites-moi ce qui ne va pas?

Jury A
la source
4
Êtes-vous conscient que cela mettra à jour toutes les lignes de votre table où visité = 0 pour devenir visité = 1? c'est ce que tu veux?
Mark Byers
23
Après avoir décoché "Mises à jour sécurisées", suivez l'étape ci-dessous: Requête -> Se reconnecter au serveur. Maintenant, exécutez votre requête
Ripon Al Wasim
5
Vous devez vous reconnecter au serveur MySQL (redémarrer la connexion MySQL) avant que cette modification ne prenne effet.
Philip Olson

Réponses:

1613

Il semble que votre session MySql dispose de l' option de mise à jour sécurisée . Cela signifie que vous ne pouvez pas mettre à jour ou supprimer des enregistrements sans spécifier de clé (par exemple primary key) dans la clause where.

Essayer:

SET SQL_SAFE_UPDATES = 0;

Ou vous pouvez modifier votre requête pour suivre la règle (utiliser primary keydans where clause).

Habibillah
la source
J'ai mentionné que j'avais déjà désactivé l'option de mise à jour sécurisée de l'interface graphique qui a le même effet que l'ID que j'ai tapé la commande. Cependant, merci pour votre réponse, mais j'ai déjà répondu à ma question. Vérifiez ma réponse pour savoir quel était le problème.
Jury A
8
Une fois que vous avez modifié l'option dans l'interface graphique, vous devez vous reconnecter à la base de données pour que le paramètre soit correctement défini.
Tim Koscielski
31
Assurez-vous de régler ce paramètre SET SQL_SAFE_UPDATES = 1lorsque vous avez terminé, car il s'agit d'une fonction de sécurité intéressante.
StockB
4
Je ne suis pas d'accord avec StockB ... Vous voudrez peut-être le garder pendant que vous vous familiarisez avec SQL ... mais une fois que vous savez ce que vous faites ... cette chose est complètement inutile. De toute façon, vous ne devriez pas développer vos trucs sur un serveur de production, donc même si vous vous trompez, la seule chose que vous devriez casser est votre serveur de développement .. dont personne ne se soucie de toute façon.
Mathieu Turcotte du
3
Je suis seulement venu pour dire que j'ai cherché ce poste 20 fois au cours des 6 derniers mois car j'avais toujours cette option sur false pendant 11 ans, mais maintenant je travaille sur une entreprise avec cet ensemble sur true pour le développement et la production. Il y a de nombreuses raisons de le définir sur 0 par défaut, par exemple lorsque vous développez des fonctionnalités autonomes que vous souhaiterez peut-être exporter directement vers csv, puis le marquer comme exporté ou quelque chose de similaire. D'autres fois, c'est ennuyeux en raison des mises à jour globales qui n'ont évidemment pas de filtre pk. Je le vois plus comme une protection contre les noobs que comme une fonctionnalité vraiment utile.
JoelBonetR
455

Suivez les étapes suivantes avant d'exécuter la commande UPDATE: Dans MySQL Workbench

  1. Allez à Edit->Preferences
  2. Cliquez sur l' "SQL Editor"onglet et uncheck"Mises à jour sécurisées"check box
  3. Query-> Reconnect to Server // se déconnecter puis se connecter
  4. Maintenant, exécutez votre requête SQL

ps, pas besoin de redémarrer le démon MySQL!

Ripon Al Wasim
la source
20
Pour la version 6.3, l'étape 2 devrait être "Sql Editor"au lieu de "Sql Queries", puis il y a une case à cocher en bas pour"Safe Updates"
meconroy
1
si c'est une chose unique, je vous suggère de le réactiver car cela rend très facile le nettoyage royal de vos données si vous ne faites pas attention
Frankenmint
2
merci conroy. Pendant un moment, je n'ai pas pu voir cette boîte. J'ai juste dû agrandir la fenêtre.
arn-arn
Peut-être l'ont-ils déplacé, mais dans MySQL Workbench 6.0, c'est sous "SQL Queries", pas sous "SQL Editor"
MPelletier
1
ouais même ici, a dû faire défiler un peu pour le voir.
Elon Zito
167
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
user2531028
la source
4
malheureusement, les autres solutions basées sur les requêtes n'ont pas fonctionné pour moi. Mais celui-ci l'a fait! J'apprécie que vous ayez ajouté une ligne pour réactiver les mises à jour sûres.
SherylHohman
1
J'aime vraiment celui-ci car c'est probablement le plus général de tous tout en restant en sécurité.
Nae
117

Pas besoin de mettre SQL_SAFE_UPDATES à 0 , je le découragerais vraiment de le faire de cette façon. SAFE_UPDATES est activé par défaut pour une RAISON. Vous pouvez conduire une voiture sans ceintures de sécurité et autres choses si vous savez ce que je veux dire;) Ajoutez simplement dans la clause WHERE une valeur KEY qui correspond à tout comme une clé primaire comparée à 0, donc au lieu d'écrire:

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.

Maintenant, vous pouvez être assuré que chaque enregistrement est (TOUJOURS) mis à jour comme prévu.

Rudy De Volder
la source
3
C'est génial!
Amos Long
réponse appréciée: +1
Asif Raza
2
Haha, c'est un bon truc. J'ai utilisé WHERE id > 0comme astuce le long de cette ligne.
Csaba Toth du
Ça ne marche pas pour moi, ça continue de me montrer le même Message. Je l'ai résolu en désactivant le mode de mise à jour sécurisé en: -Edit -> Préférences -> Sql Editor puis décochez la mise à jour sécurisée.
Abdelhadi Lahlou
2
Comment est-ce que cela le rend plus sûr, cependant?
Matt Messersmith
107

Il suffit de: Lancer une nouvelle requête et exécuter:

SET SQL_SAFE_UPDATES = 0;

Ensuite: exécutez la requête que vous tentiez d'exécuter qui ne fonctionnait pas auparavant.

Bourbier12
la source
7
Bienvenue à SO, assurez-vous de lire la page de visite et la page d' aide , et évitez de poster des réponses comme celle-ci car de nombreuses réponses en dessous de celle-ci disent exactement la même chose et ont été publiées il y a des mois
WOUNDEDStevenJones
1
Vous pouvez également réactiver cette option après avoir exécuté la requête.
kta
Qu'est-ce que cette réponse ajoute? Vous venez de publier la même chose que Habibillah, plus de deux ans plus tard. Vous essayez de récolter du karma?
Luc
71

SET SQL_SAFE_UPDATES = 0;

votre code SQL ici

SET SQL_SAFE_UPDATES = 1;

Carlos Henrique Moreira Dos S.
la source
66

Code d'erreur: 1175. Vous utilisez le mode de mise à jour sécurisé et vous avez essayé de mettre à jour une table sans WHERE qui utilise une colonne KEY Pour désactiver le mode sans échec, basculez l'option dans Préférences -> Éditeur SQL et reconnectez-vous.

Désactiver temporairement le "Mode de mise à jour sécurisé"

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

Désactivez le "Mode de mise à jour sécurisé" pour toujours

MySQL Workbench 8.0:

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

entrez la description de l'image ici L'ancienne version peut:

MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
Tính Ngô Quang
la source
41
  1. Préférences ...
  2. "Mises à jour sécurisées" ...
  3. Redémarrez le serveur

Préférences ...

Mises à jour sécurisées Redémarrez le serveur

andrew
la source
Cela aurait dû être la réponse acceptée. C'est dommage que cela n'ait pas été le cas
ErrorrrDetector
1
Vous ne devriez pas avoir à redémarrer le serveur. Il devrait suffire de simplement fermer et rouvrir la connexion.
Marc L.
1
Sous MAC, les préférences se trouvent sous le menu principal de MySQLWorkbench.
zwitterion le
36
SET SQL_SAFE_UPDATES=0;

OU

Aller à Edit --> Preferences

Cliquez sur l' SQL Queries onglet et décochez la Safe Updates case

Query --> Reconnect to Server

Maintenant, exécutez votre requête SQL

Balu
la source
26

Si vous êtes en mode sans échec, vous devez fournir la clause id dans where. Donc, quelque chose comme ça devrait fonctionner!

UPDATE tablename SET columnname=1 where id>0
Tomislav
la source
1
Cette page confirme ce fait: bennadel.com/blog/…
DivDiff
20

Sur WorkBench, je l'ai résolu en désactivant le mode de mise à jour sécurisé:

-Edit -> Préférences -> Sql Editor puis décochez la case Safe update.

Abdelhadi Lahlou
la source
7
Cela fonctionne mais j'ai dû redémarrer MySQL Workbench.
Lanil Marasinghe
17

J'ai trouvé la réponse. Le problème était que je dois faire précéder le nom de la table du nom du schéma. c'est-à-dire que la commande doit être:

UPDATE schemaname.tablename SET columnname=1;

Merci a tous.

Jury A
la source
5
Vous pouvez éviter de mentionner le nom du schéma en sélectionnant schéma dans le panneau de gauche. La sélection du schéma dans le panneau de gauche signifie que vous utilisez le schéma / la base de données sélectionné
Ripon Al Wasim
10
Ce n'est pas la réponse pour résoudre le problème décrit dans la question (et le titre). Vous devez en marquer un autre comme accepté.
T30
J'ai essayé avec schemaname mais obtenant la même erreur, mettez à jour qms-active-db.gh_table set bookmark = '1660_207100000001000'
Code_Mode
3
Ce n'est pas la réponse!
Ezekiel Victor
1
mauvaise réponse, bonne réponse est répondu par Habibillah (ci-dessous)
hariharan s
14

Dans la version 6.2 de MySQL Workbech ne quitte pas la préférenceSQLQueries options de .

Dans ce cas, il est possible d'utiliser: SET SQL_SAFE_UPDATES=0;

ferdiado
la source
1
Il existe, mais l'option est maintenant sous "Éditeur SQL".
Philip Olson
Je ne vois pas cette option. S'il vous plaît, vous pouvez obtenir une capture d'écran. Merci
ferdiado
Ouvrez Préférences -> onglet Éditeur SQL -> En bas. Une version 6.2-beta ne comportait pas cette option, donc vous devrez peut-être mettre à niveau vers 6.2.3+.
Philip Olson
ma version est 6.3, c'est sous -> SQL Editor -> Autre
tyan
12

La solution la plus simple consiste à définir la limite de lignes et à exécuter. Ceci est fait pour des raisons de sécurité.

Ruwantha
la source
2
+1 sur cette solution. Supprimer du tableau où column = 'xyz' limit 9999999999
FlyingZebra1
2
Cette réponse devrait être la réponse acceptée car c'est la manière la moins dangereuse.
Julian
7

Étant donné que la question a été répondue et n'a rien à voir avec des mises à jour sûres, ce n'est peut-être pas le bon endroit; Je posterai juste pour ajouter des informations.

J'ai essayé d'être un bon citoyen et j'ai modifié la requête pour utiliser une table temporaire d'ID qui serait mise à jour:

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

Échec. Modification de la mise à jour pour:

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

Ça a marché. Eh bien, si j'ajoute toujours où la clé <> 0 pour contourner la vérification de mise à jour sécurisée, ou même définir SQL_SAFE_UPDATE = 0, alors j'ai perdu la «vérification» de ma requête. Je pourrais aussi bien désactiver l'option de façon permanente. Je suppose que cela supprime et met à jour un processus en deux étapes au lieu d'une .. mais si vous tapez assez vite et arrêtez de penser que la clé est spéciale mais plutôt juste une nuisance

Gerard ONeill
la source
4

Certes, cela est inutile pour la plupart des exemples. Mais finalement, je suis arrivé à la déclaration suivante et cela fonctionne bien:

update tablename  set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');
Sonic-Mayhem
la source
3

Ceci est pour Mac, mais doit être le même pour les autres systèmes d'exploitation, sauf l'emplacement des préférences.

L'erreur que nous obtenons lorsque nous essayons une DELETEopération dangereuse

Cliquez sur les préférences lorsque vous obtenez cette erreur

Dans la nouvelle fenêtre, décochez l'option Safe updates

Décochez les mises à jour sécurisées

Fermez puis rouvrez la connexion. Pas besoin de redémarrer le service.

Maintenant, nous allons réessayer DELETEavec des résultats réussis.

entrez la description de l'image ici

Alors, qu'est-ce que c'est que ces mises à jour sécurisées? Ce n'est pas une mauvaise chose. C'est ce que MySql en dit.

Utilisation de l' --safe-updatesoption

Pour les débutants, une option de démarrage utile est --safe-updates(ou --i-am-a-dummy, qui a le même effet). Il est utile dans les cas où vous pourriez avoir émis une DELETE FROM tbl_namedéclaration mais oublié leWHERE clause. Normalement, une telle instruction supprime toutes les lignes de la table. Avec --safe-updates, vous pouvez supprimer des lignes uniquement en spécifiant les valeurs de clé qui les identifient. Cela aide à prévenir les accidents.

Lorsque vous utilisez l' --safe-updatesoption, mysql émet l'instruction suivante lorsqu'il se connecte au serveur MySQL:

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

Il est sûr d'activer cette option pendant que vous traitez avec la base de données de production. Sinon, vous devez faire très attention à ne pas supprimer accidentellement des données importantes.

Krishnadas PC
la source