Online DDL 工具:pt-osc
創(chuàng)新互聯(lián)成立于2013年,我們提供高端重慶網(wǎng)站建設(shè)公司、成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、全網(wǎng)整合營(yíng)銷推廣、小程序設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、seo優(yōu)化排名服務(wù),提供專業(yè)營(yíng)銷思路、內(nèi)容策劃、視覺(jué)設(shè)計(jì)、程序開(kāi)發(fā)來(lái)完成項(xiàng)目落地,為成都VR全景企業(yè)提供源源不斷的流量和訂單咨詢。
對(duì)于 MySQL Online DDL 目前主流的有三種工具:
原生 Online DDL;
pt-osc(online-schema-change),
gh-ost
本文主要講解 pt-online-schema-change 的使用以及三種工具的簡(jiǎn)單對(duì)比。
一、原理及限制
1.1 原理
1.?創(chuàng)建一個(gè)與原表結(jié)構(gòu)相同的空表,表名是?_new?后綴;
2. 修改步驟 1 創(chuàng)建的空表的表結(jié)構(gòu);
3. 在原表上加三個(gè)觸發(fā)器:delete/update/insert,用于 copy 數(shù)據(jù)過(guò)程中,將原表中要執(zhí)行的語(yǔ)句在新表中執(zhí)行;
4. 將原表數(shù)據(jù)以數(shù)據(jù)塊(chunk)的形式 copy 到新表;
5. rename 原表為 old 表,并把新表 rename 為原表名,然后刪除舊表;
6. 刪除觸發(fā)器。
如果是sqlserver數(shù)據(jù)庫(kù),其實(shí)對(duì)于某列上不存在不讓修改的說(shuō)法,sqlserver數(shù)據(jù)庫(kù)數(shù)據(jù)控制原理是角色控制,也就是說(shuō)我們對(duì)于某一個(gè)角色去下定義,讓隸屬于這個(gè)角色的用戶不能夠更新數(shù)據(jù)?;蛘咴谀硞€(gè)角色的基礎(chǔ)上不分配或是回收對(duì)某一列的權(quán)限!如果是這種情況,用一個(gè)能修改的角度登陸才行。
還有另一種就是所謂的觸發(fā)器,一旦發(fā)現(xiàn)你修改,立即返回原數(shù)據(jù),這樣你也是永遠(yuǎn)修改不了的!這時(shí)你要找到那個(gè)觸發(fā)器,將觸發(fā)器刪除后再進(jìn)行修改,然后加回觸發(fā)器即可!
但這兩種情況都是對(duì)某一列下的定義(我們稱為鎖定粒度為列)不可能是某一個(gè)單元格!
如果你是站在erp管理的基礎(chǔ)上不讓你修改那是十分正常的!
在企業(yè)管理器中使用圖形方式(如二樓給的圖)還是語(yǔ)句,則沒(méi)有任何的區(qū)別!
1. 修改表的名字
alter table table_name rename table_new_name;
其中,table_name是舊表名,table_new_name是新表名。
2.修改字段的數(shù)據(jù)類型
語(yǔ)法: alter table 表名 modify 字段名 數(shù)據(jù)類型
3.修改字段名
語(yǔ)法: alter table 表名 change 舊字段名 新字段名 新數(shù)據(jù)類型