Si vous obtenez le message d'erreur :
Warning: Some non-transactional changed tables couldn't be rolled back
en essayant de faire un ROLLBACK
, cela
signifie que certaines tables que vous avez utilisé dans la
transaction ne supportent pas les transactions.
Ces tables non-transactionnelles ne seront pas affectées par la
commande ROLLBACK
.
Si vous ne mélangez pas délibérément des tables
transactionnelles et non-transactionnelles dans une transaction,
la source la plus probablement de cette erreur est qu'une table
que vous croyiez transactionnelle ne l'est pas. Cela peut
arriver lorsque vous créez une table en utilisant un moteur de
table qui n'est pas supporté par le serveur
mysqld
(ou qui a été désactivée avec une
option de démarrage). Si mysqld
ne supporte
pas le moteur de table, il va changer le type et utiliser
MyISAM
, qui n'est pas non-transactionnelle.
Vous pouvez vérifier le type de table en utilisant une de ces commandes :
SHOW TABLE STATUS LIKE 'tbl_name'; SHOW CREATE TABLE tbl_name;
Voyez Section 13.5.3.16, « SHOW TABLE STATUS
» et
Section 13.5.3.5, « Syntaxe de SHOW CREATE TABLE
».
Vous pouvez vérifier les moteurs de tables disponibles avec le
serveur mysqld
, avec ces commandes :
SHOW ENGINES;
Avant MySQL 4.1.2, SHOW ENGINES
est
inaccessible. Utilisez la commande suivante et vérifiez la
valeur de la variable qui est associée à au moteur de tables
que vous voulez :
SHOW VARIABLES LIKE 'have_%';
Par exemple, pour déterminer si le moteur
InnoDB
est disponible, vérifiez la valeur de
la variable have_innodb
.
Voyez Section 13.5.3.7, « Syntaxe SHOW ENGINES
» et
Section 13.5.3.18, « Syntaxe de SHOW VARIABLES
».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.