MySQL 使用 MRG_MyISAM 存儲引擎來實現分表


 
MRG_MyISAM存儲引擎為MySQL的其中一個存儲引擎,使用下面語句察看MYSQL數據庫是否支持該存儲引擎。
 
 
MERGE存儲引擎,也被認識為MRG_MyISAM引擎,是一個相同的可以被當作一個來用的MyISAM表的集合。“相同”意味着所有表同樣的列和索引信息。你不能合並列被以不同順序列於其中的表,沒有恰好同樣列的表,或有不同順序索引的表。而且,任何或者所有的表可以用myisampack來壓縮的.
 
當你創建一個MERGE表之時,MySQL在磁盤上創建兩個文件。文件名以表的名字開始,並且有一個擴展名來指明文件類型。一個.frm文件存儲表定義,一個.MRG文件包含被當作一個來用的表的名字。這些表作為MERGE表自身,不必要在同一個數據庫中。
 
你可以對表的集合用SELECT, DELETE, UPDATE和INSERT。你必須對你映射到一個MERGE表的這些表有SELECT, UPDATE和DELETE 的權限。
 
如果你DROP MERGE表,你僅在移除MERGE規格。底層表沒有受影響。
 
當你創建一個MERGE表之時,你必須指定一個UNION=(list-of-tables)子句,它說明你要把哪些表當作一個來用。如果你想要對 MERGE表的插入發生在UNION列表中的第一個或最后一個表上,你可以選擇地指定一個INSERT_METHOD選項。使用FIRST或LAST值使得插入被相應地做在第一或最后一個表上。如果你沒有指定INSERT_METHOD選項,或你用一個NO值指定該選項。往MERGE表插入記錄的試圖導致錯誤。
 
 
使用案例:
 
CREATE TABLE IF NOT EXISTS `table1` (  
`id` int(11) NOT NULL AUTO_INCREMENT,  
`name` varchar(50) DEFAULT NULL,  
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  
CREATE TABLE IF NOT EXISTS `table2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  
INSERT INTO `table1` (`name`) VALUES('name1');
  
INSERT INTO `table2` (`name`) VALUES('name2');
 
CREATE TABLE IF NOT EXISTS `uTable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
INDEX(id)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 UNION=(table1,table2) INSERT_METHOD=LAST AUTO_INCREMENT=1;
 
select id,name from uTable;
+----+--------+
| id | name   |
+----+--------+
|  1 | name1  |
|  1 | name2  |
+----+--------+
2 rows in set (0.00 sec)
 
mysql> INSERT INTO `uTable` (`name`) VALUES('name3');
  
mysql> select id, name from table2  
 -> ;  
+----+-------+
| id | name  |
+----+-------+
|  1 | name2 |
|  2 | name3 |
+----+-------+
2 rows in set (0.00 sec)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM