2010-01-29 13 views

risposta

88

prova:

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

Sembra funzionare correttamente, ma esiste un altro modo per farlo senza includere la definizione della colonna? –

+0

ho giocato in giro, ma non ha funzionato. questo era il set minimo, forse c'è un altro modo. – Rufinus

+8

Questa soluzione può interrompere gli incrementi automatici. – workdreamer

-1

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

Riferimento:

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

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

+1

Questa risposta è errata (è 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 Stack Overflow . –

9

script per tutti i campi di database:

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. Esporta tutto in un file CSV
  2. aprirlo nel csv preferito edi tor

Nota: È possibile migliorare ad un solo tavolo, se si preferisce

La soluzione data dalla @Rufinus è grande, ma se si hanno incrementi di auto si romperà esso.

+3

Secondo un nuovo utente che non ha abbastanza rep per commentare, 'dump.aux_comment,' deve essere 'column_comment,'. Ti dispiacerebbe controllare se è vero? – nhahtdh

+0

Ci scusiamo per l'errore. – workdreamer

+0

Ovviamente, se si ha un id auto_increment, è necessario eseguire 'ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id dell'utente';'. Questo non interrompe gli incrementi automatici. – mpoletto

2

La risposta di Rufinus è appropriata. Preferirei usare MODIFY invece di usare CHANGE se non hai bisogno di cambiare il nome della colonna.

Non sono d'accordo con il commento di Marcus Pope. Lo schema del database delle informazioni mysql o qualsiasi luogo in cui risiede lo schema delle informazioni e che contiene la definizione dei dati di qualsiasi database non è il luogo in cui trattare queste cose. Lo schema di informazioni viene utilizzato da SGBD per registrare le modifiche richieste da qualsiasi comando DDL eseguito sul database. Perché avremmo bisogno dei comandi DDL?

Esistono due tipi di comandi SQL da utilizzare in qualsiasi database relazionale: DML e DDL. Quando aggiungi un commento, devi modificare la struttura della tabella.

da MySQL 5.6 documentazione:.

"INFORMATION_SCHEMA è un database all'interno di ciascuna istanza di MySQL, il luogo che memorizza le informazioni su tutti gli altri database che il server MySQL gestisce il database INFORMATION_SCHEMA contiene diversi lettura solo le tabelle hanno. sono effettivamente viste, non tabelle di base, quindi non ci sono file associati e non è possibile impostare trigger su di essi. Inoltre, non esiste alcuna directory di database con questo nome

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

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

24

È possibile utilizzare MODIFY COLUMN per fare questo. Basta fare...

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

sostituendo:

  • YourTable con il nome della tabella
  • your_column con il nome del tuo commento
  • your_previous_column_definition con la colonna del column_definition, che consiglio ottenendo via uno SHOW CREATE TABLE YourTable Comando e copia letterale per evitare qualsiasi trap. *
  • Your new comment con il commento della colonna desiderato.

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 si utilizza MODIFY o CHANGE clausole in un ALTER TABLE dichiarazione, suggerisco di copiare la definizione di colonna dall'output di un'istruzione SHOW CREATE TABLE. Questo ti impedisce di perdere accidentalmente una parte importante della definizione della colonna non rendendoti conto che devi includerla nella tua clausola MODIFY o CHANGE. Ad esempio, se si una colonna AUTO_INCREMENT, è necessario specificare esplicitamente il modificatore AUTO_INCREMENT nella clausola MODIFY oppure la colonna cesserà di essere una colonna AUTO_INCREMENT. Allo stesso modo, se la colonna è definita come NOT NULL o ha un valore DEFAULT, questi dettagli devono essere inclusi quando si esegue un MODIFY o CHANGE sulla colonna o verranno persi.

Problemi correlati