查詢語句系列—掛載和解除安裝資料
### 掛載(ATTACH)
此查詢語句與 CREATE 語句類似,
此語句本身並不在磁碟上建立資料, 假設 資料已經在合適的位置 , 則新增表相關資訊到伺服器上. 在執行 ATTACH 語句後, 伺服器將知道表的存在.
如果資料庫的表之前已經解除安裝(DETACH), 意思是它的結構是已知的 , 你可以使用它作為快捷方式建立表,不需要定義表結構。
ATTACH TABLE [IF NOT EXISTS] [db.] name
當啟動伺服器後,此查詢將可用。伺服器儲存表的後設資料作為ATTACH掛載語句的檔案,它在啟動時執行比較簡單。
### 解除安裝(DETACH)
從伺服器上刪除相關表的資訊. 清除伺服器對錶相關資訊和表結構的記錄。
DETACH TABLE [IF EXISTS] [db.] name
它不刪除表的資料和後設資料. 在下一次伺服器啟動後,伺服器將讀取後設資料,再次找到相關的表. 與之類似的, 一個 "已解除安裝" 的表能夠使用ATTACH 語句重新掛載.
另外,並沒有 DETACH DATABASE 語句.
### 刪除語句(DROP)
此查詢有2種型別: DROP DATABASE 和 DROP TABLE.
DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]
在 'db' 資料庫中刪除所有的表, 然後刪除 'db' 資料庫.如果IF EXISTS 被指定,如果資料庫不存在,則不返回錯誤。
DROP [TEMPORARY] TABLE [IF EXISTS] [db.] name [ON CLUSTER cluster]
刪除表 . 如果指定 IF EXISTS , 如果表不存在或資料庫不存在,則不返回錯誤。
### 重新命名(RENAME)
重新命名單個表或多個表。
RENAME TABLE [db11.] name11 TO [db12.] name12, [db21.] name21 TO [db22.] name22,...[ON CLUSTER cluster]
所有的表在全域性鎖下進行重新命名操作. 重新命名錶是一個訊號操作. 如果你在 TO 之後指定了另外一個資料庫, 此表將移動到此資料庫. 然而, 資料庫的路徑必須放在相同的檔案系統中 (否則, 錯誤將返回).
### 更改語句(ALTER)
ALTER 查詢僅支援Merge、Distributed 或 *MergeTree 表, 此查詢有基本變數.
欄位操作
更改表結構.
ALTER TABLE [db].name [ON CLUSTER cluster] ADD | DROP | MODIFY COLUMN...
在查詢過程中,指定一個逗號分隔的列表. 每個動作是對一個欄位的操作.
如下的動作將被支援:
ADD COLUMN name[type][default_expr][AFTER name_after]
新增一個新欄位到表中 ,表指定名稱、型別和預設表示式. 如果你指定 AFTER name_after(另一個欄位的名稱), 欄位將在特定欄位之後被新增. 否則, 此欄位被新增到表的末尾. 目前還不支援在表的開頭新增新的欄位。對於動作鏈, 'name_after' 是 一個列名被新增到之前的動作上.
新增一個列可改變表結構, 不需要執行任何的帶有資料的動作. 在 ALTER之後, 資料不出現在磁碟中. 當從表中讀取資料時,如果資料丟失, 它將填充預設值 (通過執行預設表示式, 或者使用0或空字串). 在合併到資料分片之後,欄位出現在磁碟上 (請參照合併樹(MergeTree)).
本方法可以讓你執行 ALTER 查詢, 而不需要增加老資料的磁碟卷.
DROP COLUMN name
刪除帶有名稱 'name' 的欄位. 從檔案系統中刪除資料. 當刪除整個檔案後, 查詢立即可用.
MODIFY COLUMN name [type] [default_expr]
更改'name'列的型別到'type' 或者預設表示式到'default_expr'.當更改型別時,此值將被轉換,類似於在列上使用 'toType' 函式.
如果只有預設表示式更改,查詢不做複雜的操作,查詢執行也立即完成。
更改列型別也是複雜動作—它改變了資料檔案的內容。對於一張大表,它將花很長時間。
有一些處理的階段:
為修改資料準備臨時檔案
重新命名舊檔案
重新命名臨時檔案到舊的名稱
刪除舊檔案
只有第一階段耗費時間. 如果在此階段發生故障, 資料將不改變. 如果在後續階段發生故障, 資料可被手動修復. 如果舊檔案從檔案系統中刪除,而新檔案的資料還沒有寫到磁碟或者丟失,則發生異常。
不支援在陣列和巢狀資料結構中更改欄位。
ALTER 查詢允許你在巢狀資料結構中建立和刪除欄位, 但是並不是整個巢狀資料結構. 為了新增一個巢狀資料結構, 你能夠新增帶有名稱 name.nested_name和 型別 Array(T) 的欄位. 一個巢狀資料結構與 多個陣列欄位等價,並有相同的字首.
不支援在主鍵上刪除欄位或者樣本鍵(此列在Engine引擎表示式中)。改變主鍵列的型別,僅可能是此更改不會影響資料修改(例如,它允許新增值到Enum或者更改DateTime型別為UInt32)。
如果ALTER查詢對於更改表結構是不充足的,你可以建立一個新表,使用INSERT SELECT 語句將資料拷貝到新表中,然後使用RENAME查詢切換表,同時刪除舊的表。
ALTER請求阻塞了所有的讀寫操作. 換句話說, 如果一個 SELECT 語句在 ALTER語句執行時執行, 其他語句將等待ALTER 語句完成後再執行. 同時,對於相同表的 所有新查詢將等待,直到ALTER執行完成。
對於不儲存資料的表來說 (例如 Merge 和 Distributed), ALTER 可以改變表的結構, 不改變下級表的結構. 例如, 當在分散式表中執行 ALTER 操作時, 你也需要執行ALTER 語句在所有的遠端節點伺服器上.
對於更新欄位的ALTER查詢是同步的. 具體配置儲存在 ZooKeeper 中, 然後 每個副本節都可以使用它. 所有的 ALTER 查詢將按照相同的順序來執行. 而,在複製表中更改列的查詢是中斷的, 所有的動作將非同步執行.
版權宣告:本文版權歸@神州雲聯科技有限公司所有,未經允許任何單位或個人不得轉載,複製或以任何其他方式使用本文全部或部分,侵權必究。
相關文章
- 資料庫查詢語句資料庫
- ORACLE 資料庫 查詢語句與DML語句Oracle資料庫
- 檢視 Laravel 查詢資料語句Laravel
- Sql Server系列:查詢分頁語句SQLServer
- Linux裝置掛載和解除安裝Linux
- 資料查詢語句:DQL(Data Query Language)
- (轉)Oracle常用資料字典查詢語句Oracle
- linux磁碟掛載與解除安裝Linux
- SQL SERVER 資料庫查詢表和欄位資訊語句SQLServer資料庫
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- DQL(Date Query Language)資料庫查詢語句資料庫
- MySQL資料庫:7、SQL常用查詢語句MySql資料庫
- 查詢資料庫中的topsql語句資料庫SQL
- [Linux]檔案掛載和解除安裝Linux
- Hql查詢語句
- mysql查詢語句MySql
- [Linux]rpm,dpkg安裝,查詢,解除安裝,升級Linux
- SQL server資料庫表碎片比例查詢語句SQLServer資料庫
- 在DISM中,掛載(Mounting)和解除安裝(Unmounting)掛載點(Mount Point)索引號(Index)解除安裝(Unmounting)索引Index
- [Mysql 查詢語句]——查詢欄位MySql
- docker 安裝mysql並掛載資料DockerMySql
- Elasticsearch查詢語句語法Elasticsearch
- 使用 Oracle Data Pump 解除安裝和載入資料庫內容Oracle資料庫
- mybatis執行查詢語句查詢不到結果,控制檯輸出sql語句複製到資料庫中能查到資料MyBatisSQL資料庫
- mysql查詢語句集MySql
- SQL查詢語句 (Oracle)SQLOracle
- MySQL查詢阻塞語句MySql
- SQL server 查詢語句SQLServer
- Hibernate 查詢語句
- oracle查詢語句大全Oracle
- sql查詢語句流程SQL
- SQL mother查詢語句SQL
- Mysql之查詢語句MySql
- mysql查詢語句5:連線查詢MySql
- [Mysql 查詢語句]——分組查詢group byMySql
- [Mysql 查詢語句]——查詢指定記錄MySql
- JAVA 中使用 SQL 語句查詢 EXCEL 檔案資料JavaSQLExcel
- Mysql 資料庫 -------- SQL語句進階查詢 ------- 前部分MySql資料庫