改变MySQL表在列上添加注释

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

// for table ALTER TABLE myTable COMMENT 'Hello World' // for columns // ??? 

尝试:

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

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

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

 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给出的解决scheme是伟大的,但如果你有自动增量将打破它。

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

参考:

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

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

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

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

有两种types的SQL命令可用于任何关系数据库:DML和DDL。 当你添加评论时,你需要改变表格结构。

从MySQL 5.6文档:

“INFORMATION_SCHEMA是每个MySQL实例中的一个数据库,它存储MySQL服务器维护的所有其他数据库的信息。INFORMATION_SCHEMA数据库包含多个只读表,它们实际上是视图,而不是基表,因此没有文件与他们关联,你不能设置触发器,也没有这个名字的数据库目录。

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

https://dev.mysql.com/doc/refman/5.6/en/information-schema.html