博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySql 修改列的注释信息的方法
阅读量:6687 次
发布时间:2019-06-25

本文共 1748 字,大约阅读时间需要 5 分钟。

1. 问题

     已经有很多数据的按照业务逻辑分表的一系列表修改一个字段(类型,如-1:默认值,1:表示'人员id',2:表示‘公司id’)的注释
2. 解决方法
     1> 使用alter table方法
ALTER TABLE table_name  MODIFY COLUMN column_name TINYINT(tinyint表示column类型) COMMENT '-1:默认值,1:人员id,2:公司id';
这种方法会重建表,如果数据量大,一个表100w数据,执行1min,如果分表数30个那就总共需要执行30min
     2> 使用元数据表
USE information_schema;
UPDATE COLUMNS t  SET t.column_comment  = '-1:默认值,1:人员id,2:公司id'  WHERE t.TABLE_SCHEMA='database_name' AND t.table_name='table_name'  AND t.COLUMN_NAME='column_name ';
 查询语句,更新前可以查询一下
SELECT t.column_comment FROM COLUMNS t WHERE t.TABLE_SCHEMA='database_name' AND t.TABLE_NAME='table_name' AND t.COLUMN_NAME='column_name ';
本想这种修改元数据的方法可以修改表的字段注释,但是没有权限执行,错误如下:
错误代码: 1044
Access denied for user 'usr'@'%' to database 'information_schema'
咦?这是为毛呢???!!!
想法很丰满,现实很骨感。
官方解释:
INFORMATION_SCHEMA是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。
每位MySQL用户均有权访问这些表,但仅限于表中的特定行,在这类行中含有用户具有恰当访问权限的对象。
事实上,尽管不需要生成名为INFORMATION_SCHEMA的文件,我们仍提供了名为INFORMATION_SCHEMA的新数据库。可以使用USE语句将INFORMATION_SCHEMA选择为默认数据库,但访问该数据库中所含表的唯一方式是使用SELECT语句。不能在其中插入内容,不能更新它们,也不能删除其中的内容。
     
网摘:
Mysql没有Oracle那么方便,修改注释的时候需要指定{type}(这是Mysql设计的不合理性!);系统数据字典表COLUMNS中有保存所有表的字段信息,但是系统字典表是只读的,无法修改注释;
所以,Mysql修改注释必须按照上面的格式对不同类型做判断,并且带有长度的字段必须指明length与decimals,否则更新注释的时候会修改length,decimals为默认值的;
修改Mysql注释是件麻烦的事情,但是也只能这样了
    3> 难道就没有别的方法了?
Are you kidding?!如果没有别的办法了我会写3!!!
当对于一个大表进行ALTER TABLE的时候,性能问题就产生了。MySQL大部分改动的步骤如下:根据新的表结构创建一个空表,从旧表中把数据取出来插入到新表中,在删除旧表。这是个非常漫长的过程。许多人ALTER TABLE之后,都有等待1小时或者1天的痛苦经历。
你可以这样,新建一个表,改变那个列的comment,然后原始实例关闭,替换.frm文件,再重启。
详情请咨询dba,这可是个技术活,我等rd表示一头雾水。可以参考
      4> 我等RD难道会因为改不了column注释就此放弃吗?
R U kidding again?!!
妥协方案,修改你的程序DB实体注释,大部分实体注释和DB注释一致,但是如果遇到频繁增加type类型这种情况。。。还是跟DB实体加注释吧,或者如果有枚举类型,枚举里描述清楚,这样起码让后来人能够不那么迷茫
吐槽:mysql真傻,真的...

转载地址:http://fchao.baihongyu.com/

你可能感兴趣的文章
python操作mysql总结
查看>>
JavaScript学习-自定义对象属性迭代器
查看>>
查看java源码显示source not found
查看>>
Linux常用经典命令
查看>>
命令行参数及全局替换程序
查看>>
Android Studio 快捷键
查看>>
hive的函数
查看>>
【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
查看>>
cocos2d游戏 如何显示分数 分数变化
查看>>
OD命令
查看>>
GNU C相关
查看>>
.NET面试题解析(01)-值类型与引用类型
查看>>
我的Java学习笔记 java11-面向对象
查看>>
图解Git命令
查看>>
数组去除重复的几个方法
查看>>
XJOI NOIP模拟题1
查看>>
os._exit(), sys.exit(), exit()
查看>>
集合框架之Arrays工具类的asList()方法的使用
查看>>
Excel导入数据库,兼容Excel2003,2007
查看>>
如何创建只读权限oracle账户
查看>>