【Mysql 学习】MERGE存储引擎(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:

MERGE存储引擎(一)
MERGE表的问题
   MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合。“相同”意味着所有表同样的列和索引信息。你不能合并列被以不同顺序列于其中的表,没有恰好同样列的表,或有不同顺序索引的表。而且,任何或者所有的表可以用myisampack来压缩。表选项的差异,比如AVG_ROW_LENGTH, MAX_ROWS或PACK_KEYS都不重要。
   当你创建一个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表插入记录的试图导致错误。

下面例子说明如何创建一个MERGE表:
mysql> create table pay_2009 (
    -> id int,
    -> pay_date datetime,
    -> amount decimal(15,3),
    -> key idx_fk_id(id)
    -> ) engine=myisam;
Query OK, 0 rows affected (0.06 sec)

mysql> create table pay_2010 (
    -> id int,
    -> pay_date datetime,
    -> amount decimal(15,3),
    -> key idx_fk_id(id)
    -> ) engine=myisam;
Query OK, 0 rows affected (0.13 sec)

mysql> create table pay_all (
    -> id int,
    -> pay_date datetime,
    -> amount decimal(15,3),
    -> index (id)
    -> ) engine=merge union=(pay_2009,pay_2010) insert_method=first;
Query OK, 0 rows affected (0.09 sec)
mysql> insert into pay_2009 values(1,'2009-09-27',10000),(2,'2009-09-17',20000);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into pay_2010 values(1,'2010-09-27',10000),(2,'2010-09-17',20000);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

 

mysql>
注意,一个列在MERGEN表中被索引,但没有被宣告为一个PRIMARY KEY,因为它是在更重要的MyISAM表中。这是必要的,因为MERGE表在更重要的表中的设置上强制非唯一性。

创建MERGE表之后,你可以发出把一组表当作一体来操作的查询:

mysql> select * from pay_2009;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2009-09-27 00:00:00 | 10000.000 |
|    2 | 2009-09-17 00:00:00 | 20000.000 |
+------+---------------------+-----------+
2 rows in set (0.00 sec)

mysql> select * from pay_2010;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2010-09-27 00:00:00 | 10000.000 |
|    2 | 2010-09-17 00:00:00 | 20000.000 |
+------+---------------------+-----------+
2 rows in set (0.00 sec)

mysql> select * from pay_all;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2009-09-27 00:00:00 | 10000.000 |
|    2 | 2009-09-17 00:00:00 | 20000.000 |
|    1 | 2010-09-27 00:00:00 | 10000.000 |
|    2 | 2010-09-17 00:00:00 | 20000.000 |
+------+---------------------+-----------+
4 rows in set (0.00 sec)

mysql> insert into pay_all values(3,'2009-12-02',80000);
Query OK, 1 row affected (0.00 sec)

mysql> select * from pay_2009;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2009-09-27 00:00:00 | 10000.000 |
|    2 | 2009-09-17 00:00:00 | 20000.000 |
|    3 | 2009-12-02 00:00:00 | 80000.000 |
+------+---------------------+-----------+
3 rows in set (0.00 sec)

mysql> select * from pay_2010;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2010-09-27 00:00:00 | 10000.000 |
|    2 | 2010-09-17 00:00:00 | 20000.000 |
+------+---------------------+-----------+
2 rows in set (0.00 sec)

mysql> select * from pay_all;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2009-09-27 00:00:00 | 10000.000 |
|    2 | 2009-09-17 00:00:00 | 20000.000 |
|    3 | 2009-12-02 00:00:00 | 80000.000 |
|    1 | 2010-09-27 00:00:00 | 10000.000 |
|    2 | 2010-09-17 00:00:00 | 20000.000 |
+------+---------------------+-----------+
5 rows in set (0.00 sec)
注意,你也可以直接从MySQL之外直接操作.MRG文件: 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
16天前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
166 5
|
1月前
|
关系型数据库 MySQL 数据管理
Mysql基础学习day03-作业
本内容包含数据库建表语句及多表查询示例,涵盖内连接、外连接、子查询及聚合统计,适用于员工与部门数据管理场景。
37 1
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01
本课程为MySQL基础学习第一天内容,涵盖MySQL概述、安装、SQL简介及其分类(DDL、DML、DQL、DCL)、数据库操作(查询、创建、使用、删除)及表操作(创建、约束、数据类型)。适合初学者入门学习数据库基本概念和操作方法。
140 6
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02-作业
本教程介绍了数据库表的创建与管理操作,包括创建员工表、插入测试数据、删除记录、更新数据以及多种查询操作,涵盖了SQL语句的基本使用方法,适合初学者学习数据库操作基础。
59 0
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day03
本课程为MySQL基础学习第三天内容,主要讲解多表关系与多表查询。内容涵盖物理外键与逻辑外键的区别、一对多、一对一及多对多关系的实现方式,以及内连接、外连接、子查询等多表查询方法,并通过具体案例演示SQL语句的编写与应用。
55 0
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01-作业
本教程包含三个数据库表的创建练习:学生表(student)要求具备主键、自增长、非空、默认值及唯一约束;课程表(course)定义主键、非空唯一字段及数值精度限制;员工表(employee)包含自增主键、非空字段、默认值、唯一电话号及日期时间类型字段。每个表的结构设计均附有详细SQL代码示例。
57 0
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02
本课程为MySQL基础学习第二天内容,涵盖数据定义语言(DDL)的表查询、修改与删除操作,以及数据操作语言(DML)的增删改查功能。通过具体SQL语句与实例演示,帮助学习者掌握MySQL表结构操作及数据管理技巧。
85 0
|
5月前
|
存储 SQL 关系型数据库
MySQL存储引擎简介
在选择相应的存储引擎时,需要充分考虑实际业务场景、性能需求和数据一致性要求,从而为数据管理提供最佳支持。
328 17
|
7月前
|
存储 关系型数据库 MySQL
MYSQL支持的存储引擎有哪些, 有什么区别
MYSQL存储引擎有很多, 常用的就二种 : MyISAM和InnerDB , 者两种存储引擎的区别 ; ● MyISAM支持256TB的数据存储 , InnerDB只支持64TB的数据存储 ● MyISAM 不支持事务 , InnerDB支持事务 ● MyISAM 不支持外键 , InnerDB支持外键
|
1月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
80 3

推荐镜像

更多