Modifica la tabella MySQL per aggiungere commenti sulle colonne


Risposte:


134

provare:

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

12
Sembra funzionare bene, ma c'è un altro modo per farlo senza includere la definizione della colonna?
Jhonny D. Cano -Leftware-

15
Questa soluzione può interrompere gli incrementi automatici.
workdreamer

13
Notare che la modifica di un commento provocherà una ricostruzione completa della tabella. Quindi puoi scegliere di vivere senza di essa su un tavolo molto grande.
Courtney Miles

2
@ MarcusPope è impossibile. Vedi dba.stackexchange.com/questions/78268/…
gaRex

5
@ user2045006 Ciò non è (o non è più) vero, a condizione che la definizione della colonna corrisponda esattamente alla definizione esistente. È possibile aggiungere commenti senza causare la ricostruzione della tabella.
Torben

36

Puoi usare MODIFY COLUMNper farlo. Basta fare...

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

sostituendo:

  • YourTable con il nome del tuo tavolo
  • your_column con il nome del tuo commento
  • your_previous_column_definitioncon la colonna column_definition , che consiglio di ottenere tramite un SHOW CREATE TABLE YourTablecomando e di copiare alla lettera per evitare qualsiasi trappola. *
  • Your new comment con il commento di colonna che desideri.

Per esempio...

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)

* Ogni volta che usi MODIFYo CHANGEclausole in ALTER TABLEun'istruzione, ti suggerisco di copiare la definizione della colonna dall'output di SHOW CREATE TABLEun'istruzione. Questo ti protegge dalla perdita accidentale di una parte importante della definizione della tua colonna non rendendoti conto che devi includerla nella tua clausola MODIFYo CHANGE. Ad esempio, se si tratta di MODIFYuna AUTO_INCREMENTcolonna, è necessario specificare di AUTO_INCREMENTnuovo in modo esplicito il modificatore nella MODIFYclausola o la colonna cesserà di essere una AUTO_INCREMENTcolonna. Allo stesso modo, se la colonna è definita come NOT NULLo ha un DEFAULTvalore, questi dettagli devono essere inclusi quando si esegue un MODIFYo CHANGEsulla colonna o andranno persi.


14

Script per tutti i campi nel database:

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. Esporta tutto in un CSV
  2. Aprilo sul tuo editor CSV preferito

Nota: puoi passare a un solo tavolo se preferisci

La soluzione fornita da @Rufinus è ottima, ma se hai incrementi automatici la romperà.


3
Secondo un nuovo utente che non ha abbastanza rappresentante per commentare, dump.aux_comment,deve esserlo column_comment,. Ti dispiacerebbe controllare se è vero?
nhahtdh

Scusa per l'errore.
workdreamer

Ovviamente, se hai un id auto_increment, devi farlo ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';. Questo non interrompe gli incrementi automatici.
mpoletto

@workdreamer Mi riferivo alla soluzione Rufinus che dici che potrebbe interrompere l'incremento automatico. No, la soluzione data non lo rompe.
mpoletto

1
Impressionante incredibile!
Rizki Noor Hidayat Wijaya

4

Lo schema delle informazioni non è il posto giusto per trattare queste cose (vedere i comandi del database DDL).

Quando si aggiunge un commento è necessario modificare la struttura della tabella (commenti della tabella).

Dalla documentazione di MySQL 5.6:

INFORMATION_SCHEMA è un database all'interno di ogni istanza MySQL, il luogo che memorizza le informazioni su tutti gli altri database gestiti dal server MySQL. Il database INFORMATION_SCHEMA contiene diverse tabelle di sola lettura. In realtà sono viste, non tabelle di base, quindi non ci sono file associati e non è possibile impostare trigger su di esse. Inoltre, non esiste una directory del database con quel nome.

Sebbene sia possibile selezionare INFORMATION_SCHEMA come database predefinito con un'istruzione USE, è possibile solo leggere il contenuto delle tabelle, non eseguire operazioni INSERT, UPDATE o DELETE su di esse.

Capitolo 21 Tabelle INFORMATION_SCHEMA


-3

Come da documentazione è possibile aggiungere commenti solo al momento della creazione della tabella. Quindi è necessario avere la definizione della tabella. Un modo per automatizzarlo utilizzando lo script per leggere la definizione e aggiornare i tuoi commenti.

Riferimento:

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

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


2
Questa risposta è sbagliata (è possibile aggiornare i commenti dopo la creazione della tabella anche se è noioso) e si collega solo ad altri siti Web, quindi non è utile in termini di risposta di Stack Overflow.
Lukas Eder
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.