代码之家  ›  专栏  ›  技术社区  ›  Jhonny D. Cano -Leftware-

更改mysql表以添加对列的注释

  •  87
  • Jhonny D. Cano -Leftware-  · 技术社区  · 14 年前

    我一直在检查 MySQL Documentation for ALTER TABLE 而且,它似乎不包括向列添加或修改注释的方法。我该怎么做?

    // for table
    ALTER TABLE myTable COMMENT 'Hello World'
    
    // for columns
    // ???
    
    5 回复  |  直到 6 年前
        1
  •  103
  •   Rufinus    14 年前

    尝试:

     ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
    
        2
  •  27
  •   Mark Amery Harley Holcombe    10 年前

    你可以使用 MODIFY COLUMN 这样做。只要…

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

    替代:

    • YourTable 用你的桌子的名字
    • your_column 用你的评论的名字
    • your_previous_column_definition 与列的 column_definition ,我建议您通过 SHOW CREATE TABLE YourTable 命令并逐字复制以避免任何陷阱。*
    • Your new comment 使用所需的列注释。

    例如。。。

    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)
    

    *无论何时使用 MODIFY CHANGE An中的子句 ALTER TABLE 语句,我建议您从 SHOW CREATE TABLE 声明。这样可以防止意外丢失列定义的重要部分,因为您不知道需要将其包含在 修改 变化 条款。例如,如果您 修改 AUTO_INCREMENT 列,需要显式指定 自动增量 在中再次修改 修改 否则该列将不再是 自动增量 列。同样,如果列定义为 NOT NULL 或有 DEFAULT 值,在执行 修改 变化 在列上,否则它们将丢失。

        3
  •  10
  •   workdreamer Stefan Gehrig    11 年前

    数据库上所有字段的脚本:

    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. 全部导出到csv
    2. 在您最喜欢的csv编辑器上打开它

    注意:如果您愿意,可以只改进到一个表

    @rufinus给出的解决方案很好,但是如果您有自动增量,它会破坏它。

        4
  •  2
  •   mold    6 年前

    鲁芬努斯的回答是恰当的。如果不需要更改列的名称,我希望使用modify而不是使用change。

    我不同意马库斯·波普的评论。MySQL信息数据库模式或任何驻留信息模式并且包含任何数据库的数据定义的地方都不是处理这些事情的地方。SGBD使用信息模式来记录对数据库执行的任何DDL命令所需的更改。为什么我们需要DDL命令?

    任何关系数据库中都可以使用两种类型的SQL命令:DML和DDL。添加注释时,需要更改表结构。

    来自MySQL5.6文档:

    “Information_模式是每个MySQL实例中的一个数据库,它存储有关MySQL服务器维护的所有其他数据库的信息。信息模式数据库包含几个只读表。它们实际上是视图,而不是基表,因此没有与它们相关联的文件,您不能对它们设置触发器。此外,没有具有该名称的数据库目录。

    尽管可以使用use语句选择信息模式作为默认数据库,但只能读取表的内容,不能对其执行插入、更新或删除操作。”

    Chapter 21 INFORMATION_SCHEMA Tables

        5
  •  -3
  •   Nageswara Rao    12 年前

    根据文档,您只能在创建表时添加注释。所以必须有表定义。使用脚本来读取定义和更新注释的一种自动化方法。

    参考文献:

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

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