博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql merge表介绍
阅读量:5278 次
发布时间:2019-06-14

本文共 3224 字,大约阅读时间需要 10 分钟。

         在Mysql数据库中。表有点类似于视图。以下就让我们来一起了解一下Mysql Merge表都有哪些长处。希望对您能有所帮助。

Mysql Merge表的长处:

A: 分离静态的和动态的数据
B:利用结构接近的的数据来优化查询
C: 查询时能够訪问更少的数据
D:更easy维护大数据集
E: 能够通过改动.mrg文件来改动Merge表,当然也能够用alter进行改动,改动后要通过FLUSH TABLES刷新表缓存。此法能够动态添加降低子表
创建方法,例:
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;
以下加入測试数据
mysql>INSERT INTO t1(a) VALUES(1),(2);
mysql>INSERT INTO t2(a)VALUES(1),(2);
查询一下看看结果
mysql>SELECT a FROM mrg;
结果会显示出t1,t2两个表中的数据
+------+
|  a     |
+------+
|       1|
|       2|
|       1|
|       2|
+------+

对于merge表,须要注意的是   

1。每一个子表的结构必须一致。主表和子表的结构须要一致。
2。每一个子表的索引在merge表中都会存在,所以在merge表中不能依据该索引进行唯一性检索。

3  子表须要是MyISAM引擎
4   REPLACE在merge表中不会工作
5   AUTO_INCREMENT 不会依照你所期望的方式工作。

创建Mysql Merge表的參数 INSERT_METHOD有几个參数 。

LAST  假设你运行insert 指令来操作merge表时,插入操作会把数据加入到最后一个子表中。FIRST  同理。运行插入数据时会把数据加入到第一个子表中。
比方本例。对merge表运行插入操作
mysql>INSERT INTO mrg(a)VALUES(18);
查询一下
mysql>SELECT a FROM t2;
结果你会发现18出如今t2表中。
---------------------------------------------------------------
假设你对mrg表或者子表进行了DROP操作,那将有可能会产生些不可预知的情况。

假设删除mrg表。那么各个子表间将不会有联系。

可是假设删除当中的任一子表,对于GNU/LINUX来说,merge表结构及数据仍然存在。

mysql>DROP TABLE t1,t2;
mysql>SELECT a FROM mrg;
结果你会发现mrg表的查询结果不变。

他将多个表在逻辑上当作一个表来查询。他建立后有两个文件, 

.frm 表结构定义 
.mrg union表的名字清单

--
-- merger表的结构 `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`);

--

-- 导出表中的数据 `test_merge`
--

INSERT INTO `test_merge` (`id`, `names`) VALUES

(1, 'aa'),
(1, 'bb'),
(1, 'cc');

-- --------------------------------------------------------

--

-- 基本表的结构 `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 ;

--

-- 导出表中的数据 `test_merge_1`
--

INSERT INTO `test_merge_1` (`id`, `names`) VALUES

(1, 'aa');

-- --------------------------------------------------------

--

--基本 表的结构 `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 ;

--

-- 导出表中的数据 `test_merge_2`
--

INSERT INTO `test_merge_2` (`id`, `names`) VALUES

(1, 'bb');

-- --------------------------------------------------------

--

-- 基本表的结构 `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 ;

--

-- 导出表中的数据 `test_merge_3`
--

INSERT INTO `test_merge_3` (`id`, `names`) VALUES

(1, 'cc');
1. 此表类似于SQL中的union机制。 
2. 此表结构必须与基本表全然一致。包含列名、顺序。UNION表必须同属一个DATABASE。

 

3. 基本表类型必须是MyISAM。 
4. 能够通过改动.mrg文件来改动MERGE表,每一个基本表的名字占一行。注意:改动后要通过FLUSH TABLES刷新表缓存。 
5. 对基本表的更改能够直接反映在此表上。 
6. INSERT_METHOD的取值能够是: 0 不同意插入 FIRST 插入到UNION中的第一个表 LAST 插入到UNION中的最后一个表。(4.0之后可用) 
7. 定义在它上面的约束没有不论什么作用,约束是由基本表控制的,比如两个基本表中存在着相同的一个Key值。那么在MERGE表中会有两个一样的Key值。

转载于:https://www.cnblogs.com/blfshiye/p/5115472.html

你可能感兴趣的文章
javascript的发展及个人笔记
查看>>
全选,反全选,反选,获取选中的值,根据子选择控制全选按钮
查看>>
梦断代码读后感01
查看>>
[CF#250 Div.2 D]The Child and Zoo(并查集)
查看>>
博客园博客插入公式
查看>>
spring ioc原理(看完后大家可以自己写一个spring)
查看>>
hdu 1028 Ignatius and the Princess III(母函数入门+模板)
查看>>
Ubuntu下配置安装telnet server
查看>>
Codeforces 235 E Number Challenge
查看>>
ubuntu 常见命令整理
查看>>
关于vue的npm run dev和npm run build
查看>>
Hive架构
查看>>
EJBCA安装教程+postgresql+wildfly10
查看>>
(五十四)涂鸦的实现和截图的保存
查看>>
关于微信暴力加很申请
查看>>
06享元、责任链
查看>>
ubuntu如何部署tftp服务
查看>>
【Alpha版本】冲刺阶段——Day 8
查看>>
解决CentOS6.x或RedHat Linux 6.x版本不能通过System eth0以固定IP访问外网的问题
查看>>
(转)Expression Tree不完全入门
查看>>