改变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
语句中使用MODIFY
或CHANGE
子句,我build议您从SHOW CREATE TABLE
语句的输出中复制列定义。 这样可以防止意外丢失列定义的重要部分,因为您没有意识到需要将其包含在MODIFY
或CHANGE
子句中。 例如,如果MODIFY
AUTO_INCREMENT
列,则需要在MODIFY
子句中再次明确指定AUTO_INCREMENT
修饰符,否则该列将不再是AUTO_INCREMENT
列。 同样,如果该列被定义为NOT NULL
或具有DEFAULT
值,则在对该列执行MODIFY
或CHANGE
时需要包括这些详细信息,否则将会丢失。
数据库上所有字段的脚本:
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
- 全部导出为CSV
- 用你最喜欢的csv编辑器打开它
注意:如果您愿意,可以只改进一张表
由@Rufinus给出的解决scheme是伟大的,但如果你有自动增量将打破它。
根据文档,您只能在创build表格时添加注释。 所以必须有表格定义。 一种使用脚本自动化的方法来读取定义并更新您的评论。
参考:
http://cornempire.net/2010/04/15/add-comments-to-column-mysql/
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