mysql 交换分区吗_MySQL分区表——交换分区
從MySQL 5.6開始,支持分區交換。就是將一個分區表中的一個分區和一個普通表中的數據互換。一、實現交換分區的基本語法:ALTER TABLEptEXCHANGE PARTITIONpWITH TABLEnt二、實現分區交換需滿足以下前提條件:1. 表nt不能為分區表,也不能是臨時表2.?表nt的表結構必須于分區表pt一致3.?表nt不包含外鍵引用,其他表也沒有任何外鍵引用表nt4. 表nt中所有行都必須在p分區范圍內,否則交換分區失敗。MySQL 5.7.5開始,可使用WITHOUT VALIDATION選項,強制交換。5. 對于InnoDB表,pt和nt兩個表必須使用相同的行格式。三、使用交換分區的注意事項:1. 使用該語句時,不會觸發交換表和被交換表上的觸發器2.?auto_increment列將被重置3.?IGNORE關鍵字在alter table ... exchange partition中不起作用四、案例模擬:根據官網提供的案例,在自己的機器上簡單的實現下:1. 新建分區表e,并插入4行記錄
2. 創建與表e結構一致的表e2,并移除分區。
remove partitioning這個語法真的第一次見,神奇。。簡單測了一下,不管表中有沒有數據都是可以remove的。
3. 查看表e的分區中各有多少行
4.將表e的分區p0 交換到表e2中
5.再觀察下表e和表2的數據
數據交換成功~當然,要與分區表交換的普通表,不一定必須是空的。繼續實驗,在表e的p0分區插入一行數據
將表e的分區p0 交換到表e2中,然后檢查數據
數據也交換成功~如果表e2中的數據不在表e的p0分區范圍內,那還能交換嗎?
前面使用交換分區必須滿足的前提條件中的第4點,其實已經講到了這個問題。可以通過使用WITHOUT VALIDATION選項,不需要逐行驗證,能夠強制交換。當表e2中有很多數據需要交換時,加上這個參數可以避免耗時的驗證,節省大量時間。
現在?(51, "Ellen", "McDonald") 這行記錄落在p0分區了。
可以通過REPAIR TABLE or ALTER TABLE ... REPAIR PARTITION來修復分區。
以上就是簡單的交換分區的方法,MySQL還提供了自分區的交換功能,我就不再細說了,有需要可以去官方文檔上看下語法??偨Y:1. ?可以將分區表的某個分區和一個空表進行分區交換,已達到將指定分區的數據遷移出去的目的。MySQL中應該沒有單獨對分區備份的功能,通過交換分區的方法,能達到快速清理分區及備份的效果。2. 可以將分區表的某個分區和一個非空表進行數據交換,可以把數據快速遷移到指定分區中。每天學習一點點點點,大家周末愉快~
總結
以上是生活随笔為你收集整理的mysql 交换分区吗_MySQL分区表——交换分区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目符号,序号
- 下一篇: 干货| 美国康奈尔大学博士生——王彦邦