J'essaie de mettre à jour la colonne visited
pour lui donner la valeur 1. J'utilise MySQL Workbench et j'écris la déclaration dans l'éditeur SQL à partir de l'intérieur du workbench. 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, activez/désactivez l'option ....
J'ai suivi les instructions et j'ai décoché l'option safe update
du menu Edit
puis Preferences
puis 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?
J'ai trouvé la réponse. Le problème était que je devais faire précéder le nom de la table avec le nom du schéma. c'est-à-dire que la commande devrait être:
UPDATE schemaname.tablename SET columnname=1;
Merci a tous.
Il semble que votre session MySql ait le jeu option de mises à jour sûres . Cela signifie que vous ne pouvez pas mettre à jour ou supprimer des enregistrements sans spécifier de clé (ex. primary key
) dans la clause where.
Essayer:
SET SQL_SAFE_UPDATES = 0;
Ou vous pouvez modifier votre requête pour suivre la règle (utilisez primary key
dans where clause
).
Suivez les étapes suivantes avant d'exécuter la commande UPDATE: In MySQL Workbench
Edit
-> Preferences
"SQL Editor"
et sur uncheck
"Mises à jour sûres" check box
Query
-> Reconnect to Server
// se déconnecter puis se connecterp.s., Pas besoin de redémarrer le démon MySQL!
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
Tout ce dont vous avez besoin est: démarrez une nouvelle requête et exécutez:
SET SQL_SAFE_UPDATES = 0;
Ensuite: Exécutez la requête que vous tentiez d'exécuter qui ne fonctionnait pas auparavant.
Pas besoin de mettre SQL_SAFE_UPDATES à, je le découragerais vraiment de le faire de cette façon. SAFE_UPDATES est activé par défaut pour un REASON. Vous pouvez conduire une voiture sans ceintures de sécurité et autres choses si vous voyez 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 vous le souhaitez.
Code d'erreur: 1175. 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 dans Préférences -> Editeur SQL et reconnectez-vous.
Désactivez temporairement le "Mode de mise à jour sécurisée"
SET SQL_SAFE_UPDATES = 0;
UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net';
SET SQL_SAFE_UPDATES = 1;
Désactive définitivement le "Mode de mise à jour sûre"
Mysql Workbench 8.0:
MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"
MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
SET SQL_SAFE_UPDATES=0;
OR
Aller àEdit --> Preferences
CliquezSQL Queries
onglet et décochezSafe Updates
case à cocher
Query --> Reconnect to Server
Maintenant, exécutez votre requête SQL
Si vous êtes en mode sans échec, vous devez fournir l'id dans la clause where. Donc, quelque chose comme ça devrait marcher!
UPDATE tablename SET columnname=1 where id>0
Sur WorkBench, j'ai résolu le problème en désactivant le mode de mise à jour sûre:
-Edit-> Préférences-> Sql Editor puis décochez Safe update.
La solution la plus simple consiste à définir la limite de lignes et à l'exécuter. Ceci est fait pour des raisons de sécurité.
Étant donné que la question a reçu une réponse et qu'elle n'a rien à voir avec des mises à jour sûres, il se peut que ce soit le mauvais 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'identifiants 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 field 1 = '' where id <> 0 and id in (select id from ids);
Ça a marché. Bon sang, si j'ajoute toujours la clé where <> 0 pour contourner la vérification de la mise à jour en toute sécurité, ou même pour 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 manière permanente. Je suppose que cela supprime et met à jour un processus en deux étapes au lieu d’un .. mais si vous tapez assez vite et que vous arrêtez de penser à la clé qui est spéciale mais plutôt gênante ..
C'est vrai, cela ne sert à rien 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');
Ceci est pour Mac, mais doit être identique pour les autres systèmes d'exploitation, à l'exception de l'emplacement des préférences.
L'erreur que nous obtenons lorsque nous essayons une opération non sécurisée DELETE
Dans la nouvelle fenêtre, décochez l'option Safe updates
Fermez et rouvrez la connexion. Pas besoin de redémarrer le service.
Nous allons maintenant essayer à nouveau la DELETE
avec des résultats positifs.
Alors, qu'est-ce qui se passe avec ces mises à jour sûres? Ce n'est pas une mauvaise chose. C'est ce que MySql en dit.
Utilisation de l'option --safe-updates
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 avez peut-être émis une instructionDELETE FROM tbl_name
mais que vous avez oublié la clauseWHERE
. 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'option
--safe-updates
, mysql émet l'instruction suivante lors de la connexion au serveur MySQL:
SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;
Activez cette option en toute sécurité lorsque vous traitez avec une base de données de production. Sinon, vous devez faire très attention à ne pas supprimer accidentellement des données importantes.
SET SQL_SAFE_UPDATES = 0;
votre code SQL ici
SET SQL_SAFE_UPDATES = 1;