Modifier la table MySQL pour ajouter des commentaires sur les colonnes

110

J'ai vérifié la documentation MySQL pour ALTER TABLE et il ne semble pas inclure un moyen d'ajouter ou de modifier un commentaire dans une colonne. Comment puis-je faire ceci?

-- for table
ALTER TABLE myTable COMMENT 'Hello World'

-- for columns
-- ???
Jhonny D. Cano -Leftware-
la source

Réponses:

135

essayer:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
Rufinus
la source
12
Cela semble fonctionner correctement, mais y a-t-il un autre moyen de le faire sans inclure la définition de colonne?
Jhonny D. Cano -Leftware-
15
Cette solution peut interrompre les incréments automatiques.
workdreamer
13
Notez que la modification d'un commentaire entraînera une refonte complète de la table. Vous pouvez donc choisir de vous en passer sur une très grande table.
Courtney Miles
2
@MarcusPope c'est impossible. Voir dba.stackexchange.com/questions/78268/…
gaRex
5
@ user2045006 Ce n'est pas (ou plus) vrai, tant que la définition de colonne correspond exactement à la définition existante. Des commentaires peuvent être ajoutés sans provoquer de reconstruction de table.
Torben
36

Vous pouvez utiliser MODIFY COLUMNpour faire cela. Faites juste ...

ALTER TABLE YourTable
MODIFY COLUMN your_column
your_previous_column_definition COMMENT "Your new comment"

remplacement:

  • YourTable avec le nom de votre table
  • your_column avec le nom de votre commentaire
  • your_previous_column_definitionavec la colonne column_definition , que je recommande d'obtenir via une SHOW CREATE TABLE YourTablecommande et de copier textuellement pour éviter les pièges. *
  • Your new comment avec le commentaire de colonne souhaité.

Par exemple...

mysql> CREATE TABLE `Example` (
    ->   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    ->   `some_col` varchar(255) DEFAULT NULL,
    ->   PRIMARY KEY (`id`)
    -> );
Query OK, 0 rows affected (0.18 sec)

mysql> ALTER TABLE Example
    -> MODIFY COLUMN `id`
    -> int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Look, I''m a comment!';
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE Example;
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                  |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Example | CREATE TABLE `Example` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Look, I''m a comment!',
  `some_col` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

* Chaque fois que vous utilisez des clauses MODIFYou CHANGEdans une ALTER TABLEinstruction, je vous suggère de copier la définition de colonne à partir de la sortie d'une SHOW CREATE TABLEinstruction. Cela vous évite de perdre accidentellement une partie importante de votre définition de colonne en ne réalisant pas que vous devez l'inclure dans votre clause MODIFYor CHANGE. Par exemple, si vous utilisez MODIFYune AUTO_INCREMENTcolonne, vous devez à AUTO_INCREMENTnouveau spécifier explicitement le modificateur dans la MODIFYclause , sinon la colonne cessera d'être une AUTO_INCREMENTcolonne. De même, si la colonne est définie comme NOT NULLou a une DEFAULTvaleur, ces détails doivent être inclus lors de l'exécution d'un MODIFYou CHANGEsur la colonne , sinon ils seront perdus.

Mark Amery
la source
14

Script pour tous les champs de la base de données:

SELECT 
table_name,
column_name,
CONCAT('ALTER TABLE `',
        TABLE_SCHEMA,
        '`.`',
        table_name,
        '` CHANGE `',
        column_name,
        '` `',
        column_name,
        '` ',
        column_type,
        ' ',
        IF(is_nullable = 'YES', '' , 'NOT NULL '),
        IF(column_default IS NOT NULL, concat('DEFAULT ', IF(column_default IN ('CURRENT_TIMESTAMP', 'CURRENT_TIMESTAMP()', 'NULL', 'b\'0\'', 'b\'1\''), column_default, CONCAT('\'',column_default,'\'') ), ' '), ''),
        IF(column_default IS NULL AND is_nullable = 'YES' AND column_key = '' AND column_type = 'timestamp','NULL ', ''),
        IF(column_default IS NULL AND is_nullable = 'YES' AND column_key = '','DEFAULT NULL ', ''),
        extra,
        ' COMMENT \'',
        column_comment,
        '\' ;') as script
FROM
    information_schema.columns
WHERE
    table_schema = 'my_database_name'
ORDER BY table_name , column_name
  1. Tout exporter vers un CSV
  2. Ouvrez-le sur votre éditeur csv préféré

Remarque: vous pouvez passer à une seule table si vous préférez

La solution donnée par @Rufinus est excellente, mais si vous avez des incréments automatiques, elle la cassera.

rêveur de travail
la source
3
Selon un nouvel utilisateur qui n'a pas assez de représentants pour commenter, dump.aux_comment,doit l'être column_comment,. Voudriez-vous vérifier si c'est vrai?
nhahtdh
Désolé pour l'erreur.
workdreamer
Bien sûr, si vous avez un identifiant auto_increment, vous devez le faire ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';. Cela ne rompt pas les incréments automatiques.
mpoletto
@workdreamer Je faisais référence à la solution Rufinus dont vous dites qu'elle pourrait casser l'incrémentation automatique. Non, la solution donnée ne la brise pas.
mpoletto
1
Génial incroyable!
Rizki Noor Hidayat Wijaya
4

Le schéma d'information n'est pas l'endroit pour traiter ces choses (voir Commandes de base de données DDL).

Lorsque vous ajoutez un commentaire, vous devez modifier la structure du tableau (commentaires du tableau).

À partir de la documentation MySQL 5.6:

INFORMATION_SCHEMA est une base de données dans chaque instance MySQL, l'endroit qui stocke les informations sur toutes les autres bases de données que le serveur MySQL gère. La base de données INFORMATION_SCHEMA contient plusieurs tables en lecture seule. Ce sont en fait des vues et non des tables de base, donc aucun fichier ne leur est associé et vous ne pouvez pas y définir de déclencheurs. De plus, il n'y a pas de répertoire de base de données avec ce nom.

Bien que vous puissiez sélectionner INFORMATION_SCHEMA comme base de données par défaut avec une instruction USE, vous pouvez uniquement lire le contenu des tables, pas effectuer des opérations INSERT, UPDATE ou DELETE sur celles-ci.

Chapitre 21 Tables INFORMATION_SCHEMA

mpoletto
la source
-3

Selon la documentation, vous ne pouvez ajouter des commentaires qu'au moment de la création du tableau. Il est donc indispensable d'avoir une définition de table. Une façon de l'automatiser en utilisant le script pour lire la définition et mettre à jour vos commentaires.

Référence:

http://cornempire.net/2010/04/15/add-comments-to-column-mysql/

http://bugs.mysql.com/bug.php?id=64439

Nageswara Rao
la source
2
Cette réponse est fausse (il est possible de mettre à jour les commentaires après la création de la table même si c'est fastidieux), et elle ne renvoie que vers d'autres sites Web, donc ce n'est pas utile en termes de réponse Stack Overflow.
Lukas Eder le