J'utilise JDBC avec mysql. J'ai une série assez complexe d'insertions et de mises à jour que je fais en une seule transaction. Cela semble fonctionner pour la plupart, mais environ 1% du temps, je trouve que les données dans un de mes tableaux est dans un état incohérent.Une transaction fonctionne-t-elle pour les instructions sur plusieurs tables?
Je annule la transaction en cas d'erreur, mais je ne suis pas sûr de savoir comment démarrer le débogage. Ma configuration ressemble généralement à:
try {
conn.setAutoCommit(false);
PreparedStatement stmt1 = conn.prepareStatement("insert into table1");
stmt1.executeUpdate();
stmt1.close();
PreparedStatement stmt2 = conn.prepareStatement("update table2");
stmt2.executeUpdate();
stmt2.close();
... more statements ...
conn.commit();
}
catch (Exception ex) {
conn.rollback();
}
J'utilise une version 2010 de mysql. Je pourrais essayer de mettre à jour cela, mais j'ai l'impression que c'est plus quelque chose dans mon code d'application qui cause l'incohérence.
Y a-t-il des outils de débogage que je pourrais trouver utiles au niveau de la base de données pour vous aider? D'autres pointeurs? J'utilise JDBC avec tous les paramètres par défaut, je me demande s'il y a un niveau de transaction plus stricte que je dois utiliser pour ce genre de scénario?
Merci
----- ----- Remarque Tous mes tableaux sont InnoDB.
La première chose que vous devez vérifier est si vous utilisez MyISAM ou InnoDB. MyISAM ne supporte pas les transactions. – nos
Confirmé toutes mes tables sont InnoDb. – user291701
niveau de transaction lecture validée? – Sebas