2010-01-29 12 views

Répondre

88

essayer:

ALTER TABLE `user` CHANGE `id` `id` INT(11) COMMENT 'id of user' 
+6

Cela semble fonctionner correctement, mais existe-t-il un autre moyen de le faire sans inclure la définition de la colonne? –

+0

j'ai joué autour, mais cela n'a pas fonctionné. c'était l'ensemble minimum, peut-être il y a un autre moyen. – Rufinus

+8

Cette solution peut casser les incréments automatiques. – workdreamer

-1

Selon la documentation, vous pouvez ajouter des commentaires uniquement au moment de la création de la table. 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

+1

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. . –

9

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

SELECT 
table_name, 
column_name, 
CONCAT('ALTER TABLE `', 
     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 = 'CURRENT_TIMESTAMP', 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. Exporter tout dans un fichier CSV
  2. Ouvrir sur votre csv favori edi tor

Remarque: Vous pouvez améliorer à une seule table si vous préférez

La solution donnée par @Rufinus est grande, mais si vous avez incrémente automatiquement il va le casser.

+3

Selon un nouvel utilisateur qui n'a pas assez de rep pour commenter, 'dump.aux_comment,' doit être 'column_comment,'. Pourriez-vous vérifier si c'est vrai? – nhahtdh

+0

Désolé pour l'erreur. – workdreamer

+0

Bien sûr, si vous avez un ID auto_increment, vous devez faire 'ALTER TABLE MODIFY id INT NON NULL AUTO_INCREMENT COMMENT' ID de l'utilisateur '; '. Cela ne casse pas les incréments automatiques. – mpoletto

2

La réponse de Rufinus est appropriée. Je préférerais utiliser MODIFY au lieu d'utiliser CHANGE si vous n'avez pas besoin de changer le nom de la colonne.

Je ne suis pas d'accord avec le commentaire de Marcus Pope. Le schéma de base de données d'informations mysql ou n'importe quel endroit où réside le schéma d'information et qui contient la définition de données de n'importe quelle base de données n'est pas l'endroit pour traiter ces choses. Le schéma d'informations est utilisé par le SGBD pour enregistrer les modifications requises par toute commande DDL exécutée sur la base de données. Pourquoi aurions-nous besoin des commandes DDL?

Il existe deux types de commandes SQL à utiliser dans n'importe quelle base de données relationnelle: DML et DDL. Lorsque vous ajoutez un commentaire, vous devez modifier la structure de la table.

Depuis MySQL 5.6 documentation:. L'endroit qui stocke des informations sur toutes les autres bases de données que le serveur MySQL entretient

« INFORMATION_SCHEMA est une base de données dans chaque instance de MySQL, la base de données INFORMATION_SCHEMA contient plusieurs tables en lecture seule Ils. En fait, il n'y a pas de répertoire de base de données avec ce nom, mais il n'y a pas de fichiers de base de données associés à ce nom. une instruction USE, vous pouvez seulement lire le contenu des tables, pas effectuer les opérations INSERT, UPDATE ou DELETE sur eux. "

https://dev.mysql.com/doc/refman/5.6/en/information-schema.html

24

Vous pouvez utiliser MODIFY COLUMN pour ce faire. Fais juste ...

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

substitution:

  • YourTable avec le nom de votre table
  • your_column avec le nom de votre commentaire
  • your_previous_column_definition avec column_definition de la colonne, que je vous recommande obtenir via un SHOW CREATE TABLE YourTable commande et copie verbatim pour éviter les pièges. *
  • Your new comment avec le commentaire de colonne que vous voulez.

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 MODIFY ou CHANGE clauses dans une déclaration ALTER TABLE, je vous suggère de copier la définition de la colonne de la sortie d'une déclaration SHOW CREATE TABLE. Cela vous protège 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 MODIFY ou CHANGE. Par exemple, si vous MODIFY une colonne AUTO_INCREMENT, vous devez spécifier explicitement le modificateur AUTO_INCREMENT dans la clause MODIFY, sinon la colonne cessera d'être une colonne AUTO_INCREMENT. De même, si la colonne est définie comme NOT NULL ou a une valeur DEFAULT, ces détails doivent être inclus lors de l'exécution d'un MODIFY ou CHANGE dans la colonne ou ils seront perdus.

Questions connexes