« MySQL/Débogage » : différence entre les versions

Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 9 :
Toutefois il est possible de lever des exceptions lors des manipulations de table, par exemple pour éviter qu'une liste d'insertions s'arrête au milieu à cause d'une contrainte d'unicité. L'exemple ci-dessous fonctionne sur une table InnoDB (et pas MyISAM)<ref>http://stackoverflow.com/questions/2950676/difference-between-set-autocommit-1-and-start-transaction-in-mysql-have-i-misse</ref> :
 
<sourcesyntaxhighlight lang=mysql>
ALTER TABLE `MaTable1` ADD UNIQUE(`id`);
 
Ligne 22 :
ROLLBACK;
END IF;
</syntaxhighlight>
</source>
Ici une erreur surgit lors de la deuxième insertion d'un id=1. Selon une condition, on peut donc annuler les insertions de 2 et 3, ou bien les soumettre.
 
Ligne 39 :
* Vérifier que l'hôte du compte n'a pas été changé par une règle réseau.
*:Si c'est le cas, tester en shell :
<sourcesyntaxhighlight lang=bash>
sudo mysql -h mon_hôte1 -u mon_compte
sudo mysql -h mon_hôte2 -u mon_compte
</syntaxhighlight>
</source>
* Sinon, recréer le droit avec :
<sourcesyntaxhighlight lang=mysql>
GRANT ALL PRIVILEGES ON *.* TO 'mon_compte'@'mon_hôte2' IDENTIFIED BY PASSWORD 'mon_mot_de_passe_hashé';
</syntaxhighlight>
</source>
 
=== Base table or view not found: 1146 Table 'xxx' doesn't exist" is not defined, use one of: 100, 200, 250, 300, 400, 500, 550, 600 ===
Ligne 67 :
=== Can't create/write to file 'mon_dossier/mon_fichier.csv' ===
Lors d'un SELECT INTO OUTFILE, si le compte du SGBD utilisé a les droits d'exportation (<code>GRANT FILE ON .* TO 'mon_compte'@'%';</code>), le problème est lié au compte MySQL de l'OS qui n'a pas accès au système de fichier. Comme généralement le compte "mysql" sur Linux n'a pas de shell, cela peut se confirmer ainsi :
<sourcesyntaxhighlight lang=bash>
su - -s /bin/bash mysql
touch mon_dossier/mon_fichier.csv
</syntaxhighlight>
</source>
 
Si les droits manquent :
<sourcesyntaxhighlight lang=bash>
sudo chown -R mysql mon_dossier
</syntaxhighlight>
</source>
 
=== Cannot add foreign key constraint ===
Ligne 84 :
=== Cannot drop index 'UNIQ_XXX': needed in a foreign key constraint ===
Il faut supprimer la clé étrangère avant l'index duquel elle dépend :
<sourcesyntaxhighlight lang=mysql>
ALTER TABLE `maTable` DROP FOREIGN KEY `FK_XXX`;
ALTER TABLE `maTable` DROP INDEX `UNIQ_XXX`;
</syntaxhighlight>
</source>
 
=== Data too long for column ===
Ligne 94 :
 
Toutefois cela ne préserve pas leur encodage Unicode. Le mieux est donc :
<sourcesyntaxhighlight lang=sql>
SET NAMES 'utf8';
</syntaxhighlight>
</source>
 
=== Foreign data src error ===
Ligne 124 :
 
Pour les supprimer, l'utilisateur root n'a pas le droit de modifier directement directement la table "information_schema". Il faut donc exécuter les requêtes générées par la suivante :
<sourcesyntaxhighlight lang=mysql>
SELECT concat('alter table ',table_schema,'.',table_name,' DROP FOREIGN KEY ',constraint_name,';')
FROM information_schema.table_constraints
WHERE constraint_type='FOREIGN KEY'
AND table_name='maTable';
</syntaxhighlight>
</source>
 
=== Lock wait timeout exceeded; try restarting transaction ===
Le serveur SQL est surchargé : exécuter les instructions une par une.
Sinon :
<sourcesyntaxhighlight lang=mysq>
SET innodb_lock_wait_timeout = 120;
</syntaxhighlight>
</source>
 
=== Syntax error or access violation ===