更改MySQL表以在列上添加注释

Jho*_*re- 100 mysql alter-table

我一直在检查ALTER TABLEMySQL文档,它似乎没有包含添加或修改注释到列的方法.我怎样才能做到这一点?

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

-- for columns
-- ???
Run Code Online (Sandbox Code Playgroud)

Ruf*_*nus 120

尝试:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案可以破坏自动增量. (13认同)
  • 它似乎工作正常,但有没有其他方法来做到这一点,而不包括列定义? (11认同)
  • 请注意,更改注释将导致表的完全重构.所以你可以选择在没有大桌子的情况下生活. (11认同)
  • @MarcusPope这是不可能的。参见http://dba.stackexchange.com/questions/78268/updating-mysql-trigger-via-information-schema-access-denied (2认同)
  • @ user2045006这不是(或不再是)正确,只要列定义与现有定义完全匹配即可。可以添加注释而不会导致表重建。 (2认同)

Mar*_*ery 32

你可以MODIFY COLUMN用来做这件事.做就是了...

ALTER TABLE YourTable
MODIFY COLUMN your_column
your_previous_column_definition COMMENT "Your new comment"
Run Code Online (Sandbox Code Playgroud)

代:

  • 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)
Run Code Online (Sandbox Code Playgroud)

*无论何时在语句中使用MODIFY或使用CHANGE子句ALTER TABLE,我建议您从SHOW CREATE TABLE语句的输出中复制列定义.这可以防止您意外丢失列定义的重要部分,因为没有意识到您需要将其包含在您的MODIFYCHANGE子句中.例如,如果MODIFYAUTO_INCREMENT列,则需要AUTO_INCREMENTMODIFY子句中再次显式指定修饰符,否则列将不再是AUTO_INCREMENT列.同样,如果列定义为NOT NULL或具有DEFAULT值,则在执行MODIFYCHANGE在列上执行时需要包含这些详细信息,否则它们将丢失.


wor*_*mer 12

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

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
Run Code Online (Sandbox Code Playgroud)
  1. 全部导出为CSV
  2. 在你最喜欢的csv编辑器上打开它

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

@Rufinus给出的解决方案很棒,但如果你有自动增量,它将打破它.

  • 根据没有足够的rep来评论的新用户,`dump.aux_comment,`需要是`column_comment,`.你介意检查一下是否属实? (3认同)
  • 太棒了太棒了! (2认同)