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

问题描述 投票:91回答:5

我一直在检查MySQL Documentation for ALTER TABLE,它似乎没有包括添加或修改列的注释的方法。我怎样才能做到这一点?

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

-- for columns
-- ???
mysql alter-table
5个回答
113
投票

尝试:

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

30
投票

你可以使用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语句中使用CHANGEALTER TABLE子句,我建议您从SHOW CREATE TABLE语句的输出中复制列定义。这可以防止您意外丢失列定义的重要部分,因为您没有意识到需要将其包含在MODIFYCHANGE子句中。例如,如果MODIFYAUTO_INCREMENT列,则需要在AUTO_INCREMENT子句中再次明确指定MODIFY修饰符,否则该列将不再是AUTO_INCREMENT列。类似地,如果列定义为NOT NULL或具有DEFAULT值,则在列上执行MODIFYCHANGE时需要包含这些详细信息,否则它们将丢失。


11
投票

Script for all fields on database:

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给出的解决方案很棒,但如果你有自动增量,它将打破它。


3
投票

Rufinus的答案是恰当的。如果您不需要更改列的名称,我宁愿使用MODIFY而不是使用CHANGE。

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

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

从MySQL 5.6文档:

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

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

Chapter 21 INFORMATION_SCHEMA Tables


-3
投票

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

参考:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.