mysql merge表介绍
? ? ? ? ?在Mysql數(shù)據(jù)庫中。Mysql Merge表有點類似于視圖。以下就讓我們來一起了解一下Mysql Merge表都有哪些長處。希望對您能有所幫助。
Mysql Merge表的長處:
A: 分離靜態(tài)的和動態(tài)的數(shù)據(jù)
B:利用結(jié)構(gòu)接近的的數(shù)據(jù)來優(yōu)化查詢
C: 查詢時能夠訪問更少的數(shù)據(jù)
D:更easy維護大數(shù)據(jù)集
E: 能夠通過改動.mrg文件來改動Merge表,當然也能夠用alter進行改動,改動后要通過FLUSH TABLES刷新表緩存。此法能夠動態(tài)添加降低子表
創(chuàng)建方法,例:
mysql>CREATE TABLE t1(a INT NOT NULL PRIMARY KEY)ENGINE=MyISAM;
mysql>CREATE TABLE t2(a INT NOT NULL PRIMARY KEY)ENGINE=MyISAM;
mysql>CREATE TABLE mrg(a INT NOT NULL PRIMARY KEY)ENGINE=MERGE UNION=(t1,t2)??????? INSERT_METHOD=LAST;
以下加入測試數(shù)據(jù)
mysql>INSERT INTO t1(a) VALUES(1),(2);
mysql>INSERT INTO t2(a)VALUES(1),(2);
查詢一下看看結(jié)果
mysql>SELECT a FROM mrg;
結(jié)果會顯示出t1,t2兩個表中的數(shù)據(jù)
+------+
|? a???? |
+------+
|?????? 1|
|?????? 2|
|?????? 1|
|?????? 2|
+------+
對于merge表,須要注意的是???
1。每一個子表的結(jié)構(gòu)必須一致。主表和子表的結(jié)構(gòu)須要一致。
2。每一個子表的索引在merge表中都會存在,所以在merge表中不能依據(jù)該索引進行唯一性檢索。
3? 子表須要是MyISAM引擎
4?? REPLACE在merge表中不會工作
5?? AUTO_INCREMENT 不會依照你所期望的方式工作。
創(chuàng)建Mysql Merge表的參數(shù) INSERT_METHOD有幾個參數(shù) 。
LAST? 假設(shè)你運行insert 指令來操作merge表時,插入操作會把數(shù)據(jù)加入到最后一個子表中。FIRST? 同理。運行插入數(shù)據(jù)時會把數(shù)據(jù)加入到第一個子表中。
比方本例。對merge表運行插入操作
mysql>INSERT INTO mrg(a)VALUES(18);
查詢一下
mysql>SELECT a FROM t2;
結(jié)果你會發(fā)現(xiàn)18出如今t2表中。
---------------------------------------------------------------
假設(shè)你對mrg表或者子表進行了DROP操作,那將有可能會產(chǎn)生些不可預知的情況。
假設(shè)刪除mrg表。那么各個子表間將不會有聯(lián)系。
可是假設(shè)刪除當中的任一子表,對于GNU/LINUX來說,merge表結(jié)構(gòu)及數(shù)據(jù)仍然存在。
mysql>DROP TABLE t1,t2;
mysql>SELECT a FROM mrg;
結(jié)果你會發(fā)現(xiàn)mrg表的查詢結(jié)果不變。
他將多個表在邏輯上當作一個表來查詢。他建立后有兩個文件,?
.frm 表結(jié)構(gòu)定義?
.mrg union表的名字清單
--
-- merger表的結(jié)構(gòu) `test_merge`
--
CREATE TABLE IF NOT EXISTS `test_merge` (
? `id` int(5) NOT NULL auto_increment,
? `names` varchar(100) NOT NULL,
? PRIMARY KEY? (`id`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=gb2312 INSERT_METHOD=LAST UNION=(`test_merge_1`,`test_merge_2`,`test_merge_3`);
--
-- 導出表中的數(shù)據(jù) `test_merge`
--
INSERT INTO `test_merge` (`id`, `names`) VALUES
(1, 'aa'),
(1, 'bb'),
(1, 'cc');
-- --------------------------------------------------------
--
-- 基本表的結(jié)構(gòu) `test_merge_1`
--
CREATE TABLE IF NOT EXISTS `test_merge_1` (
? `id` int(5) NOT NULL auto_increment,
? `names` varchar(100) NOT NULL,
? PRIMARY KEY? (`id`)
) ENGINE=MyISAM? DEFAULT CHARSET=gb2312 AUTO_INCREMENT=3 ;
--
-- 導出表中的數(shù)據(jù) `test_merge_1`
--
INSERT INTO `test_merge_1` (`id`, `names`) VALUES
(1, 'aa');
-- --------------------------------------------------------
--
--基本 表的結(jié)構(gòu) `test_merge_2`
--
CREATE TABLE IF NOT EXISTS `test_merge_2` (
? `id` int(5) NOT NULL auto_increment,
? `names` varchar(100) NOT NULL,
? PRIMARY KEY? (`id`)
) ENGINE=MyISAM? DEFAULT CHARSET=gb2312 AUTO_INCREMENT=2 ;
--
-- 導出表中的數(shù)據(jù) `test_merge_2`
--
INSERT INTO `test_merge_2` (`id`, `names`) VALUES
(1, 'bb');
-- --------------------------------------------------------
--
-- 基本表的結(jié)構(gòu) `test_merge_3`
--
CREATE TABLE IF NOT EXISTS `test_merge_3` (
? `id` int(5) NOT NULL auto_increment,
? `names` varchar(100) NOT NULL,
? PRIMARY KEY? (`id`)
) ENGINE=MyISAM? DEFAULT CHARSET=gb2312 AUTO_INCREMENT=2 ;
--
-- 導出表中的數(shù)據(jù) `test_merge_3`
--
INSERT INTO `test_merge_3` (`id`, `names`) VALUES
(1, 'cc');
1. 此表類似于SQL中的union機制。?
2. 此表結(jié)構(gòu)必須與基本表全然一致。包含列名、順序。UNION表必須同屬一個DATABASE。
?
3. 基本表類型必須是MyISAM。?
4. 能夠通過改動.mrg文件來改動MERGE表,每一個基本表的名字占一行。注意:改動后要通過FLUSH TABLES刷新表緩存。?
5. 對基本表的更改能夠直接反映在此表上。?
6. INSERT_METHOD的取值能夠是: 0 不同意插入 FIRST 插入到UNION中的第一個表 LAST 插入到UNION中的最后一個表。(4.0之后可用)?
7. 定義在它上面的約束沒有不論什么作用,約束是由基本表控制的,比如兩個基本表中存在著相同的一個Key值。那么在MERGE表中會有兩個一樣的Key值。
轉(zhuǎn)載于:https://www.cnblogs.com/blfshiye/p/5115472.html
總結(jié)
以上是生活随笔為你收集整理的mysql merge表介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全排列(递归与非递归实现)
- 下一篇: 可变字典 添加 删除 遍历