一. 什么是MERGE引擎

MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。

二. 应用场景

如果需要把日志纪录不停的录入MySQL数据库,并且每天、每周或者每个月都创建一个单一的表,而且要时常进行来自多个表的合计查询,MERGE表这时会非常简单有效。

三. 举例

假设有如下两表

1 CREATE TABLE `t1` (

2 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

3 `log` varchar(45) ,

4 PRIMARY KEY (`id`)

5 ) ENGINE=MyISAM;

1 CREATE TABLE `t2`(

2 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

3 `log` varchar(45) ,

4 PRIMARY KEY (`id`)

5 ) ENGINE=MyISAM;

假设t1,t2中都有如下记录

+----+-------+

| id | log |

+----+-------+

| 1 | test1 |

| 2 | test2 |

| 3 | test3 |

+----+-------+

建立MERGE表

1 CREATE TABLE `t` (

2 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

3 `log` varchar(45) NOT NULL,

4 PRIMARY KEY (`id`)

5 ) ENGINE=MERGE UNION=(t1, t2) INSERT_METHOD=LAST;

执行select * from t;将会得到如下结果

+----+-------+

| id | log |

+----+-------+

| 1 | test1 |

| 2 | test2 |

| 3 | test3 |

| 1 | test1 |

| 2 | test2 |

| 3 | test3|

+----+-------+

从效果上看,t1,t2的记录如同在一张表里一样被罗列了出来。当然,看了这个结果你一定会有一些疑问,在下一节里我们会慢慢解释。现在我们主要来解释一下上面MERGE表的建表语句。

1)ENGINE=MERGE

指明使用MERGE引擎,有些同学可能见到过ENGINE=MRG_MyISAM的例子,也是对的,它们是一回事。

2)UNION=(t1, t2)

指明了MERGE表中挂接了些哪表,可以通过alter table的方式修改UNION的值,以实现增删MERGE表子表的功能。

3)INSERT_METHOD=LAST

INSERT_METHOD指明插入方式,取值可以是:0 不允许插入;FIRST 插入到UNION中的第一个表; LAST 插入到UNION中的最后一个表。

4)MERGE表及构成MERGE数据表结构的各成员数据表必须具有完全一样的结构。每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义。

四. Cookie问答

1)建表时UNION指明的子表如果存在相同主键的记录会怎么样?

相同主键的记录会同时存在于MERGE中,就像第三节中的例子所示。但如果继续向MERGE表中插入数据,若数据主键已存在则无法插入。换言之,MERGE表只对建表之后的操作负责。

2)若MREGE后存在重复主键,按主键查询会是什么结果?

顺序查询,只出现一条查询记录即停止。比如第三节中的例子,如果执行

1 select * from t where id=1;

只会得到结果

+----+--------+

| id | log |

+----+--------+

| 1 | test1 |

+----+--------+

3)直接删除一个子表会出现什么情况,正确删除的方式是怎样的?

MERGE表会被破坏,正确方式是用alter table方式先将子表从MERGE表中去除,再删除子表。

以第三节中的例子为例,执行如下操作

可以从MERGE表中去除t2,这里你可以安全的对t2进行任何操作了。

4)误删子表时,如何恢复MERGE表?

误删子表时,MERGE表上将无法进行任何操作。

方法1,drop MERGE表,重建。重建时注意在UNION部分去掉误删的子表。

方法2,建立MERGE表时,会在数据库目录下生成一个.MRG文件,比如设表名为t,则文件名为t.MRG。

文件内容类似:

t1

t2

#INSERT_METHOD=LAST

指明了MGEGE表的子表构成及插入方式。

可以直接修改此文件,去掉误删表的表名。然后执行flush tables即可修复MERGE表。

5)MERGE的子表中之前有记录,且有自增主键,则MERGE表创建后,向其插入记录时主键以什么规则自增?

以各表中的AUTO_INCREMENT最大值做为下一次插入记录的主键值。

比如t1的自增ID至6,t2至4,则创建MERGE表后,插入的下一条记录ID将会是7

6)两个结构完全相同的但已存在数据的表,是否一定可以合成一个MEREGE表?

从实验的结果看,不是这样的,有时创建出的表,无法进行任何操作。

所以,推荐的使用方法是先有一个MERGE表,里面只包含一张表,当一个这个表的的大小增长到一定程度(比如200w)时,创建另一张空表,将其挂入MERGE表,然后继续插入记录。

7)删除MERGE表是否会对子表产生影响?

不会

8)MREGE表的子表的ENGIN是否有要求?

有的,必须是MyISAM表

mysql merge 语句_Mysql merge引擎介绍相关推荐

  1. ppst 视频—— mysql 的语句的优化方法介绍

    ppst 视频-- mysql 的语句的优化方法介绍 :具体视频请点击 mysql的优化视频, 请关注ppst 技术微博视频分享平台 1.explain 指令的使用介绍 EXPLAIN  select ...

  2. mysql 数据库引擎介绍_MYSQL 数据库引擎介绍

    一般来说,MySQL有以下几种引擎:ISAM.MyISAM.HEAP.InnoDB和Berkley(BDB).注意:不同的版本支持的引擎是有差异的.当然啦,如果你感觉自己的确技术高超,你还能够使用My ...

  3. mysql 查询语句_MySQL相关(一)- 一条查询语句是如何执行的

    前言 学习一个新知识最好的方式就是上官网,所以我先把官网贴出来 MySQL官网 (点击查阅),如果大家有想了解我没有说到的东西可以直接上官网看哈~目前 MySQL 最新大版本为8.0,但是鉴于目前应用 ...

  4. mysql 数据表操作 存储引擎介绍

    一 什么是存储引擎? 存储引擎就是表的类型. mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制 ...

  5. java mysql查询语句_Mysql查询语句执行过程

    Mysql查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注的是, ...

  6. mysql 参照完整性规则_MySQL存储引擎你们知道多少?

    MySQL存储引擎技术详解点击观看! MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的"存储引擎"(storage_engine)呢?有时候面试 ...

  7. mysql .myi权限_mysql之引擎、Explain、权限详解

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...

  8. MySQL DELETE 语句的一个简单介绍

    MySQL DELETE 语句 你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录. 你可以在 mysql> 命令提示符或 PHP 脚本中执行该命令. 语法 ...

  9. mysql set语句_MySQL Prepared语句简介

    之前的MySQL版本4.1,查询以文本格式发送到MySQL服务器. 之后,MySQL服务器使用文本协议将数据返回给客户端.MySQL必须完全解析查询,并将结果集转换为字符串,然后再将其返回给客户端. ...

最新文章

  1. 算法 - 字符串匹配
  2. python数据挖掘例题_数据挖掘与python实践试题及答案
  3. 服务器弱口令修改,Tomcat服务器弱口令漏洞攻击实验
  4. C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib,该怎么解决...
  5. C++模拟键盘操作窗口入门
  6. oracle常用操作指令
  7. Android 后台线程Thread调用前台线程Handler,延时线程,runOnUiThread使用,Timer延时,定时循环,倒计时
  8. Centos安装nmon软件 ( 测试 )
  9. unity3d 求两个点长度_Unity3D实现体积光
  10. Laravel 调试利器 Laravel Debugbar 扩展包安装及使用教程
  11. 190819每日一句
  12. 发邮件向论文作者卑微求代码模板
  13. cpu性能天梯图包含服务器,服务器cpu性能天梯图
  14. 谈微软 KMS 激活
  15. Navicat Premium和Navicat for MySQL的区别
  16. Python的Pexpect模块详解
  17. 骑行中央公园,探索纽约“后花园”别样的美
  18. solr搜索服务的使用
  19. 使用ffmpeg进行简单的视频编辑
  20. 域名服务详解(域名解析流程和分类)

热门文章

  1. python 模拟微信浏览器请求_用chrome模拟微信浏览器访问需要OAuth2.0网页授权的页面...
  2. 从知乎「悟空」看一个成熟的Anti-Spam系统演进之路
  3. 安装 webpack webpack-cli
  4. R语言使用load函数将过往保存的工作空间镜像文件(RData)加载到当前会话、使用q函数关闭当前工作空间(系统会提示是否保存或者取消)
  5. 我有10个职场经验,价值100万,但今天免费|咪蒙
  6. 【知识】正则表达式匹配中文标点符号
  7. RedisInsight 安装与使用(Redis 监控工具)
  8. 如何用Redis实现分布式锁?
  9. Python3 高空抛物
  10. Java 多线程编程核心技术