Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est-il possible d'attraper la valeur non valide dans MySQL lorsque j'obtiens une erreur de contrainte de clé étrangère ?

Malheureusement, il n'y a pas de meilleur moyen d'obtenir les erreurs de clé étrangère qu'à partir du LATEST FOREIGN KEY ERROR section dans SHOW ENGINE INNODB STATUS . Les informations de la colonne sont imprimées comme par exemple :

Trying to add in child table, in index `fk` tuple:
DATA TUPLE: 2 fields;
 0: len 11; hex 4163636573736f72794964; asc AccessoryId;;
 1: len 4; hex 80000003; asc     ;;

Ceci imprime l'ensemble complet des colonnes de l'index (fk ), et comme vous l'avez deviné, le format est :

<column index>:
  len <length of bytes stored>;
  hex <hex representation of bytes>;
  asc <ascii representation of bytes>;;

De plus, malheureusement, InnoDB n'en sait pas assez sur la façon dont les types de colonnes de MySQL sont stockés pour vous donner une représentation imprimée raisonnable, donc certaines des valeurs sont un peu "étranges", par ex. 80000003 est la représentation hexadécimale des octets stockés pour l'entier 3 (InnoDB inverse en interne le bit de poids fort).