Heim > Datenbank > MySQL-Tutorial > Hauptteil

mysql merge表介绍_MySQL

WBOY
Freigeben: 2016-05-31 08:46:39
Original
1403 Leute haben es durchsucht

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

Mysql Merge表的优点:

A: 分离静态的和动态的数据

B:利用结构接近的的数据来优化查询

C: 查询时可以访问更少的数据

D:更容易维护大数据集

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值。

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage