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

我一直在检查的 用于 ALTERTABLE 的 MySQL 文档,它似乎不包括一种方法来添加或修改一个专栏的评论。我怎么能这么做?

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


-- for columns
-- ???
183798 次浏览

尝试:

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

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

参考文献:

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

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

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

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 给出的解决方案很棒,但是如果你使用自动增量,它就会破坏它。

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

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

来自 MySQL 5.6文档:

INFORATION _ SCHEMA 是每个 MySQL 实例中的一个数据库 存储有关所有其他数据库的信息 INformATION _ SCHEMA 数据库包含几个 只读表。它们实际上是视图,而不是基表,所以 没有与它们相关联的文件,并且不能将触发器设置为 此外,没有具有该名称的数据库目录。

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

第21章信息 _ 模式表

你可以用 MODIFY COLUMN来做这个,只要..。

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

替代:

  • 带有表名的 YourTable
  • 注明你的评论名称
  • your_previous_column_definition 和列的 < strong > 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)

* 无论何时在 ALTER TABLE语句中使用 MODIFYCHANGE子句,我建议您从 SHOW CREATE TABLE语句的输出中复制列定义。这样可以防止您意外地丢失列定义的一个重要部分,因为您没有意识到需要在 MODIFYCHANGE子句中包含它。例如,如果 MODIFYAUTO_INCREMENT列,则需要在 MODIFY子句中再次显式指定 AUTO_INCREMENT修饰符,否则该列将不再是 AUTO_INCREMENT列。类似地,如果该列定义为 CHANGE1或具有 CHANGE2值,则在对该列执行 MODIFYCHANGE操作时需要包括这些细节,否则它们将丢失。