Modificar la tabla MySQL para agregar comentarios en columnas

Respuestas:

134

tratar:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
Rufinus
fuente
12
Parece que funciona bien, pero ¿hay alguna otra forma de hacerlo sin incluir la definición de la columna?
Jhonny D. Cano -Leftware-
15
Esta solución puede romper los incrementos automáticos.
Workdreamer
13
Tenga en cuenta que alterar un comentario provocará una reconstrucción completa de la tabla. Por lo tanto, puede optar por vivir sin él en una mesa muy grande.
Courtney Miles
2
@MarcusPope es imposible. Ver dba.stackexchange.com/questions/78268/…
gaRex
5
@ user2045006 Eso no es (o ya no) cierto, siempre que la definición de la columna coincida exactamente con la definición existente. Se pueden agregar comentarios sin causar la reconstrucción de la tabla.
Torben
36

Puede utilizar MODIFY COLUMNpara hacer esto. Solo haz...

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

sustituyendo:

  • YourTable con el nombre de tu mesa
  • your_column con el nombre de tu comentario
  • your_previous_column_definitioncon la column_definition de la columna , que recomiendo obtener a través de un SHOW CREATE TABLE YourTablecomando y copiar palabra por palabra para evitar trampas. *
  • Your new comment con el comentario de la columna que desee.

Por ejemplo...

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)

* Siempre que use MODIFYo CHANGEcláusulas en una ALTER TABLEdeclaración, le sugiero que copie la definición de columna de la salida de una SHOW CREATE TABLEdeclaración. Esto lo protege de perder accidentalmente una parte importante de la definición de su columna al no darse cuenta de que debe incluirla en su cláusula MODIFYo CHANGE. Por ejemplo, si tiene MODIFYuna AUTO_INCREMENTcolumna, debe especificar explícitamente el AUTO_INCREMENTmodificador nuevamente en la MODIFYcláusula, o la columna dejará de ser una AUTO_INCREMENTcolumna. De manera similar, si la columna se define como NOT NULLo tiene un DEFAULTvalor, estos detalles deben incluirse al hacer una MODIFYo CHANGEen la columna o se perderán.

Mark Amery
fuente
14

Script para todos los campos de la base de datos:

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. Exportar todo a un CSV
  2. Ábrelo en tu editor csv favorito

Nota: puede mejorar a una sola mesa si lo prefiere

La solución dada por @Rufinus es excelente, pero si tiene incrementos automáticos, la romperá.

soñador
fuente
3
Según un nuevo usuario que no tiene suficiente representante para comentar, dump.aux_comment,debe tenerlo column_comment,. ¿Le importaría comprobar si es verdad?
nhahtdh
Lo siento por el error.
workdreamer
Por supuesto, si tiene un id auto_increment, debe hacerlo ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';. Esto no rompe los incrementos automáticos.
mpoletto
@workdreamer Me refería a la solución de Rufinus que dice que podría romper el incremento automático. No, la solución dada no lo rompe.
mpoletto
1
¡Increíble increíble!
Rizki Noor Hidayat Wijaya
4

El esquema de información no es el lugar para tratar estas cosas (consulte los comandos de la base de datos DDL).

Cuando agrega un comentario, debe cambiar la estructura de la tabla (comentarios de la tabla).

De la documentación de MySQL 5.6:

INFORMATION_SCHEMA es una base de datos dentro de cada instancia de MySQL, el lugar que almacena información sobre todas las demás bases de datos que mantiene el servidor MySQL. La base de datos INFORMATION_SCHEMA contiene varias tablas de solo lectura. En realidad, son vistas, no tablas base, por lo que no hay archivos asociados con ellas y no puede establecer activadores en ellas. Además, no existe un directorio de base de datos con ese nombre.

Aunque puede seleccionar INFORMATION_SCHEMA como la base de datos predeterminada con una instrucción USE, solo puede leer el contenido de las tablas, no realizar operaciones INSERT, UPDATE o DELETE en ellas.

Capítulo 21 tablas INFORMATION_SCHEMA

mpoletto
fuente
-3

Según la documentación, puede agregar comentarios solo al momento de crear la tabla. Por lo tanto, es necesario tener una definición de tabla. Una forma de automatizarlo usando el script para leer la definición y actualizar sus comentarios.

Referencia:

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

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

Nageswara Rao
fuente
2
Esta respuesta es incorrecta (es posible actualizar los comentarios después de la creación de la tabla incluso si es tedioso) y solo se vincula a otros sitios web, por lo que no es útil en términos de una respuesta de Stack Overflow.
Lukas Eder