mysql> mise à jour du nom de table set fieldname = 'C200900674' où fieldname - 'C200900673';Comportement de mise à jour MySQL
erreur 1062 (23000): entrée en double 'C200900674-2008-0-1' pour la touche 1
Toute pensée ou suggestions à ce sujet? Quelqu'un a accidentellement fait cette mise à jour avec un signe moins au lieu d'un signe égal. Il a apparemment essayé de changer tous les enregistrements moins que cette valeur? Même si c'est alphanumérique et vraiment assez incomplet. En plus de cela, une quantité d'enregistrements a été mise à jour avant d'avoir cette erreur et il n'y a pas eu de retour du tout. Rien de tel que "Query OK, X rows affected (0.00 sec)", donc nous n'avions aucune idée du nombre de changements. autocommit = 1 donc pas de possibilité de revenir en arrière.
De toute façon, juste à la recherche de conseils ou de pointeurs à ce sujet. Pourquoi cette requête a fait quoi que ce soit, il semble vraiment qu'il aurait dû me renvoyer une erreur. Autre que la réponse évidente de ne pas laisser les administrateurs inexpérimentés faire des choses osseuses bien sûr.
La table était en INNODB et apparemment nous avons * fait * l'expérience d'une quantité d'enregistrements en cours de modification. Toutes les preuves que j'ai pu découvrir jusqu'ici en sont la preuve. La journalisation binaire a été activée sur cette boîte de sorte que l'extraction incluait même "mysqlbinlog -s {logfile} | grep -i {identifiant unique pour cet enregistrement}". FWIW cette instruction de mise à jour * était * enregistrée dans le journal binlog. Je vais continuer à jouer avec cela et peut-être essayer de faire un DB de test et des tables et essayer de le reproduire dans un environnement contrôlé. Merci ... – wdingus
Les cordes dans votre exemple sont-elles les vraies?Je peux voir cela se produire si au lieu de 'C200900674' vous avez quelque chose comme '200900674C' ou '2009C00674C', c'est-à-dire commençant par un nombre. –
Oui, la seule chose que j'ai changé était les noms de la table et du champ. – wdingus