Ho controllato la documentazione di MySQL per ALTER TABLE e non sembra includere un modo per aggiungere o modificare un commento a una colonna. Come posso fare questo?
-- for table
ALTER TABLE myTable COMMENT 'Hello World'
-- for columns
-- ???
Ho controllato la documentazione di MySQL per ALTER TABLE e non sembra includere un modo per aggiungere o modificare un commento a una colonna. Come posso fare questo?
-- for table
ALTER TABLE myTable COMMENT 'Hello World'
-- for columns
-- ???
Risposte:
provare:
ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'
Puoi usare MODIFY COLUMN
per 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 tavoloyour_column
con il nome del tuo commentoyour_previous_column_definition
con la colonna column_definition , che consiglio di ottenere tramite un SHOW CREATE TABLE YourTable
comando 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 MODIFY
o CHANGE
clausole in ALTER TABLE
un'istruzione, ti suggerisco di copiare la definizione della colonna dall'output di SHOW CREATE TABLE
un'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 MODIFY
o CHANGE
. Ad esempio, se si tratta di MODIFY
una AUTO_INCREMENT
colonna, è necessario specificare di AUTO_INCREMENT
nuovo in modo esplicito il modificatore nella MODIFY
clausola o la colonna cesserà di essere una AUTO_INCREMENT
colonna. Allo stesso modo, se la colonna è definita come NOT NULL
o ha un DEFAULT
valore, questi dettagli devono essere inclusi quando si esegue un MODIFY
o CHANGE
sulla colonna o andranno persi.
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
Nota: puoi passare a un solo tavolo se preferisci
La soluzione fornita da @Rufinus è ottima, ma se hai incrementi automatici la romperà.
dump.aux_comment,
deve esserlo column_comment,
. Ti dispiacerebbe controllare se è vero?
ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';
. Questo non interrompe gli incrementi automatici.
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.
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/