web-dev-qa-db-fra.com

Modifier le tableau MySQL pour ajouter des commentaires sur les colonnes

J'ai consulté documentation MySQL pour ALTER TABLE et il ne semble pas inclure de moyen permettant 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
-- ???
94

essayer:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
114
Rufinus

Vous pouvez utiliser MODIFY COLUMN faire ceci. Fais juste ...

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

en remplaçant:

  • YourTable avec le nom de votre table
  • your_column avec le nom de votre commentaire
  • your_previous_column_definition avec la colonne column_definition , que je recommande d'obtenir via un SHOW CREATE TABLE YourTable commande et copie textuelle 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 les clauses MODIFY ou CHANGE dans un ALTER TABLE déclaration, je vous suggère de copier la définition de la colonne à partir de la sortie d'un SHOW CREATE TABLE déclaration. 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 MODIFY ou CHANGE. Par exemple, si vous MODIFY un AUTO_INCREMENT _ colonne, vous devez spécifier explicitement le AUTO_INCREMENT modificateur à nouveau dans la clause MODIFY, sinon la colonne cessera d’être un AUTO_INCREMENT colonne. De même, si la colonne est définie en tant que NOT NULL ou a une valeur DEFAULT, ces détails doivent être inclus lorsque vous faites un MODIFY ou CHANGE sur la colonne, sinon ils seront perdus.

31
Mark Amery

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. Tout exporter en CSV
  2. Ouvrez-le sur votre éditeur de csv préféré

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

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

11
workdreamer

La réponse de Rufinus est appropriée. Je préférerais utiliser MODIFY plutôt que CHANGER 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 tout emplacement où réside le schéma d'information et qui contient la définition de données de toute base de données n'est pas l'endroit pour traiter ces éléments. 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 une base de données relationnelle: DML et DDL. Lorsque vous ajoutez un commentaire, vous devez modifier la structure du tableau.

Depuis la documentation de MySQL 5.6:

"INFORMATION_SCHEMA est une base de données au sein de chaque instance MySQL, le lieu où sont stockées des informations sur toutes les autres bases de données gérées par le serveur MySQL. La base de données INFORMATION_SCHEMA contient plusieurs tables en lecture seule. Ce sont en fait des vues, pas des tables de base, il n'y a donc aucun fichier. qui leur est associé, et vous ne pouvez pas définir de déclencheurs. De plus, aucun répertoire de base de données ne porte ce nom.

Bien que vous puissiez sélectionner INFORMATION_SCHEMA en tant que base de données par défaut avec une instruction USE, vous ne pouvez lire que le contenu des tables et non effectuer d'opérations INSERT, UPDATE ou DELETE sur celles-ci. "

Chapitre 21 Tables INFORMATION_SCHEMA

3
mpoletto