Merge引擎是一組MyISAM表的組合,組合的分表結構必須完全相同,Merge表本身沒有資料,對Merge表的操作實際上都是對子表的操作,隻是對APP來說是透明的,在插入的時候預設是插入到最後一張表上,也可以指定插入到第一張表上,Merger表實際上隻是多個子表的一個外殼,對它進行删除,不影響實際存儲的資料。
建立子表user1
<code>CREATE</code> <code>TABLE</code> <code>`user1` (</code>
<code> </code><code>`id` </code><code>int</code><code>(11) </code><code>NOT</code> <code>NULL</code> <code>AUTO_INCREMENT,</code>
<code> </code><code>`</code><code>name</code><code>` </code><code>varchar</code><code>(100) </code><code>CHARACTER</code> <code>SET</code> <code>latin1 </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
<code> </code><code>PRIMARY</code> <code>KEY</code> <code>(`id`)</code>
<code>) ENGINE=MyISAM AUTO_INCREMENT=2 </code><code>DEFAULT</code> <code>CHARSET=utf8;</code>
建立子表user2
<code>CREATE</code> <code>TABLE</code> <code>`user2` (</code>
建立Merge表alluser
<code>CREATE</code> <code>TABLE</code> <code>`alluser` (</code>
<code> </code><code>`id` </code><code>int</code><code>(11) </code><code>NOT</code> <code>NULL</code><code>,</code>
<code> </code><code>`</code><code>name</code><code>` </code><code>varchar</code><code>(100) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
<code>) ENGINE=MRG_MyISAM </code><code>DEFAULT</code> <code>CHARSET=latin1 INSERT_METHOD=</code><code>LAST</code> <code>UNION</code><code>=(`user1`,`user2`);</code>
現在對alluser進行插入資料
然後檢視user2表的資料發現已經插入進去
<a href="https://s5.51cto.com/wyfs02/M00/9C/3C/wKiom1ltxL3wjeqCAAAnas7bGzk683.jpg-wh_500x0-wm_3-wmp_4-s_3995468817.jpg" target="_blank"></a>
下一步對子表分表進行插入操作,然後檢視alluser表
<a href="https://s3.51cto.com/wyfs02/M01/9C/3C/wKiom1ltxOvw6cVNAAAm-8NsFSk725.jpg-wh_500x0-wm_3-wmp_4-s_3950426516.jpg" target="_blank"></a>
<a href="https://s3.51cto.com/wyfs02/M00/9C/3C/wKioL1ltxOyDVwqAAAApa1C6Bqc649.jpg-wh_500x0-wm_3-wmp_4-s_1620798429.jpg" target="_blank"></a>
<a href="https://s3.51cto.com/wyfs02/M02/9C/3C/wKioL1ltxP6ifVGIAAAyKb1XDmg147.jpg-wh_500x0-wm_3-wmp_4-s_3629557246.jpg" target="_blank"></a>
發現對子表的插入操作最後都會映射到alluser表中,從一定意義上實作了分表,但是也有局限性,就是資料分布不均勻,因為插入的時候不能自定義規則,隻能插入建立時指定的子表,還有就沒有限制條件的檢查,例如在三張表中都設定id為主鍵,我們在user2中插入一條user1中已經存在的資料,但是alluser表并不報錯且成功插入
<a href="https://s1.51cto.com/wyfs02/M01/9C/3C/wKioL1ltxmjRkKTdAAA1PM6kZDc831.jpg-wh_500x0-wm_3-wmp_4-s_1360109523.jpg" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M02/9C/3C/wKiom1ltxmihAGnYAAA0QRULkuU941.jpg-wh_500x0-wm_3-wmp_4-s_3499055595.jpg" target="_blank"></a>
由于這些原因,Merge引擎實作的分表在實際應用中并不多
本文轉自 無心低語 51CTO部落格,原文連結:http://blog.51cto.com/fengzhankui/1948637,如需轉載請自行聯系原作者