Altere a tabela MySQL para adicionar comentários às colunas

108

Tenho verificado a documentação do MySQL para ALTER TABLE e não parece incluir uma forma de adicionar ou modificar um comentário a uma coluna. Como posso fazer isso?

-- for table
ALTER TABLE myTable COMMENT 'Hello World'

-- for columns
-- ???
Jhonny D. Cano -Leftware-
fonte

Respostas:

134

experimentar:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
Rufinus
fonte
12
Parece funcionar bem, mas há alguma outra maneira de fazer isso sem incluir a definição da coluna?
Jhonny D. Cano -Leftware-
15
Esta solução pode interromper os incrementos automáticos.
workdreamer
13
Observe que alterar um comentário causará uma reconstrução completa da tabela. Então você pode escolher viver sem ele em uma mesa muito grande.
Courtney Miles
2
@MarcusPope é impossível. Consulte dba.stackexchange.com/questions/78268/…
gaRex
5
@ user2045006 Isso não é (ou não é mais) verdade, desde que a definição da coluna corresponda exatamente à definição existente. Os comentários podem ser adicionados sem causar a reconstrução da tabela.
Torben
36

Você pode usar MODIFY COLUMNpara fazer isso. Apenas faça...

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

substituindo:

  • YourTable com o nome da sua mesa
  • your_column com o nome do seu comentário
  • your_previous_column_definitioncom a definição_de_coluna da coluna , que recomendo obter por meio de um SHOW CREATE TABLE YourTablecomando e copiá-la na íntegra para evitar armadilhas. *
  • Your new comment com o comentário da coluna que você deseja.

Por exemplo...

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)

* Sempre que você usar MODIFYou CHANGEcláusulas em uma ALTER TABLEinstrução, sugiro que você copie a definição da coluna da saída de uma SHOW CREATE TABLEinstrução. Isso o protege de perder acidentalmente uma parte importante da definição da coluna por não perceber que precisa incluí-la em sua cláusula MODIFYou CHANGE. Por exemplo, se você usar MODIFYuma AUTO_INCREMENTcoluna, precisará especificar explicitamente o AUTO_INCREMENTmodificador novamente na MODIFYcláusula, ou a coluna deixará de ser uma AUTO_INCREMENTcoluna. Da mesma forma, se a coluna for definida como NOT NULLou tiver um DEFAULTvalor, esses detalhes precisam ser incluídos ao fazer um MODIFYou CHANGEna coluna ou eles serão perdidos.

Mark Amery
fonte
13

Script para todos os campos do banco de dados:

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. Exportar tudo para um CSV
  2. Abra-o em seu editor csv favorito

Nota: Você pode melhorar para apenas uma mesa, se preferir

A solução dada por @Rufinus é ótima, mas se você tiver incrementos automáticos, ele irá quebrá-la.

sonhador
fonte
3
De acordo com um novo usuário que não tem representante suficiente para comentar, dump.aux_comment,precisa ter column_comment,. Você se importaria de verificar se isso é verdade?
nhahtdh
Desculpe-me pelo erro.
sonhador de
Claro, se você tem um auto_increment id, você precisa fazer ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';. Isso não quebra os incrementos automáticos.
mpoletto
@workdreamer eu estava me referindo à solução de Rufinus que você diz que pode interromper o incremento automático. Não, a solução dada não o quebra.
mpoletto
1
Impressionante incrível!
Rizki Noor Hidayat Wijaya
4

O esquema de informações não é o lugar para tratar essas coisas (consulte comandos do banco de dados DDL).

Ao adicionar um comentário, você precisa alterar a estrutura da tabela (comentários da tabela).

Da documentação do MySQL 5.6:

INFORMAÇÕES_SCHEMA é um banco de dados dentro de cada instância do MySQL, o local que armazena informações sobre todos os outros bancos de dados que o servidor MySQL mantém. O banco de dados INFORMATION_SCHEMA contém várias tabelas somente leitura. Eles são, na verdade, visualizações, não tabelas base, portanto, não há arquivos associados a eles e você não pode definir gatilhos neles. Além disso, não existe um diretório de banco de dados com esse nome.

Embora você possa selecionar INFORMATION_SCHEMA como o banco de dados padrão com uma instrução USE, você só pode ler o conteúdo das tabelas, não realizar operações INSERT, UPDATE ou DELETE nelas.

Capítulo 21 Tabelas INFORMAÇÕES_CHEMA

mpoletto
fonte
-3

De acordo com a documentação, você pode adicionar comentários apenas no momento da criação da tabela. Portanto, é necessário ter uma definição de tabela. Uma maneira de automatizar usando o script para ler a definição e atualizar seus comentários.

Referência:

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

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

Nageswara Rao
fonte
2
Esta resposta está errada (é possível atualizar os comentários após a criação da tabela, mesmo que seja entediante), e ela apenas vincula a outros sites, portanto, não é útil em termos de resposta Stack Overflow.
Lukas Eder