Pour chaque table de ma base de données MySQL, j'ai un fichier mytablename.sql
qui contient l'instruction CREATE TABLE
pour cette table.Comment puis-je tester qu'une instruction SQL "CREATE TABLE" est équivalente à une table existante?
Je veux ajouter un test pour vérifier que personne n'a ajouté/modifié une colonne dans la base de données en direct sans mettre à jour ce fichier - je veux vérifier que je peux recréer une base de données vide en utilisant ces scripts.
Comment puis-je le faire de manière fiable?
Une option serait d'utiliser SHOW COLUMNS FROM mytable
(ou DESCRIBE mytable
), qui, sur la ligne de commande serait sortie sous forme de tableau comme celui-ci:
+---------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------------------+----------------+
| pk_guid | int(10) unsigned | NO | PRI | NULL | auto_increment |
| d_start | datetime | NO | MUL | 0000-00-00 00:00:00 | |
| d_end | datetime | NO | MUL | 0000-00-00 00:00:00 | |
+---------+------------------+------+-----+---------------------+----------------+
Et puis créer une table temporaire et de comparer les résultats. Cela ne pose aucun problème, sauf que si des colonnes ont été ajoutées à la base de données active, les résultats risquent de ne pas être dans le même ordre. Malheureusement, il ne semble pas possible d'utiliser ORDER BY
avec SHOW COLUMNS
.
Une autre option serait d'utiliser SHOW CREATE TABLE
, mais cela inclut des informations telles que la valeur du compteur AUTO_INCREMENT
, dont je ne me soucie pas.
Y a-t-il une meilleure façon de procéder?
Je pense que SHOW CREATE TABLE est le meilleur que vous pouvez obtenir. Qui se soucie de savoir s'il y a des informations supplémentaires, vous pouvez le couper facilement. –