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


Answers:


134

尝试:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  

12
看起来工作正常,但是还有其他方法可以不包括列定义吗?
Jhonny D. Cano -Leftware- 2010年

15
此解决方案可能会破坏自动增量。
workdreamer

13
请注意,更改注释将导致表的完全重建。因此,您可能会选择在没有它的情况下过大的生活。
Courtney Miles

2
@MarcusPope这是不可能的。见dba.stackexchange.com/questions/78268/...
gaRex

5
@ user2045006这不是(或不再是)正确,只要列定义与现有定义完全匹配即可。可以添加注释而不会导致表重建。
Torben

36

您可以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)

*每当在语句中使用MODIFYor CHANGE子句时ALTER TABLE,建议您从SHOW CREATE TABLE语句输出中复制列定义。这可以防止您不意识到自己需要在MODIFYor CHANGE子句中包含列定义,从而避免您意外丢失列定义的重要部分。例如,如果您MODIFY是一AUTO_INCREMENT列,则需要AUTO_INCREMENTMODIFY子句中再次明确指定修饰符,否则该列将不再是一AUTO_INCREMENT列。同样,如果列被定义为NOT NULL或具有DEFAULT价值,这些细节需要做时要添加MODIFYCHANGE在列,否则将丢失。


14

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

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

注意:如果您愿意,可以只将一张桌子提高到

@Rufinus给出的解决方案很好,但是如果您具有自动递增功能,它将破坏它。


3
根据没有足够评论来评论的新用户,dump.aux_comment,需要为column_comment,。您介意检查是否正确吗?
nhahtdh 2013年

对不起,这个错误。
workdreamer 2013年

当然,如果您具有id auto_increment,则需要这样做ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';。这不会破坏自动增量。
mpoletto

@workdreamer我指的是Rufinus解决方案,您说它可能会破坏自动增量。不,给定的解决方案不会破坏它。
mpoletto

1
太棒了!
Rizki Noor Hidayat Wijaya

4

信息模式不是处理这些问题的地方(请参阅DDL数据库命令)。

添加注释时,您需要更改表结构(表注释)。

从MySQL 5.6文档中:

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

尽管您可以使用USE语句选择INFORMATION_SCHEMA作为默认数据库,但是您只能读取表的内容,而不能对它们执行INSERT,UPDATE或DELETE操作。

第21章INFORMATION_SCHEMA表


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.