MySql 修改列的註釋信息的方法

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真傻,真的...mysql

相關文章
相關標籤/搜索