MERGE存储引擎(介绍,操作),FEDERATED存储引擎(介绍,操作),不同存储引擎的特性图
目录
MERGE存储引擎(合并)
介绍
创建表
语法
示例
查看.mrg文件
操作
查询结果
示例
重建逻辑表
FEDERATED存储引擎 结盟
介绍
编辑
应用场景
操作
开启
创建表
对本地表进行数据插入
EXAMPLE存储引擎
不同存储引擎的特性编辑
MERGE存储引擎(合并)
介绍
也叫MRG_MYISAM引擎,是 MySQL 中的一种特殊存储引擎
- 主要用于将多个结构完全相同 (所有表中的列都有相同的数据类型和索引信息) 的 MyISAM 表合并为一个逻辑上的表进行查询
- 这个存储引擎本身并不存储数据,而是作为多个 MyISAM 表的“视图”来操作它们
- 基础表 -- 底层多个MYISAM是真实存储数据的表
- 逻辑表 -- 作为逻辑上的统一入口
创建表
语法
需要指定插入哪些表,插入的方式
- 一般选择最后一个表
示例
先创建2个myisam基础表:
- 创建的文件包括 -- 表字段描述信息 / 表数据 / 表索引
并插入数据:
然后创建merge表(在建表语句中,将要使用的myisam表添加进去)
- 注意,
查看.mrg文件
- 包含关联的表名+插入数据的方式
操作
查询结果
id是主键,为什么会重复呢?
- 因为主键是定义在基础表内的,它只能保持内部的不重复
- 在merge表中id并不作为主键,但是可以被索引 -- 按照查询语句去基础表中索引 ; 唯一键同理
示例
当id作为查询条件时,它会去每一张表中查询:
使用merge不支持全局的主键和唯一性校验
重建逻辑表
如果现在又新增了一个基础表(也就是要将MERGE表重新映射到不同的MyISAM基础表集合),可以有以下解决方法:
- 删除MERGE表并重新创建 (使用drop table 只会删除MERGE表定义,基础MyISAM表不受影响)
- 使用 ALTER TABLE 表名 UNION=(...) 修改基础表的集合 -- 当()列表为空时,删除所有基础表
删除重建的效率很高,因为只是修改.MRG文件
FEDERATED存储引擎 结盟
介绍
一种特殊存储引擎
- 其最大特点是:本地服务器上的表不存储数据,而是将所有的查询操作转发到远程 MySQL 服务器上的表执行
- 也就是说,它在本地创建一个“代理表”,但实际数据保存在远程服务器上
- 本地环境 -- 当前创建表的一个环境,不存储真实数据,只保存表结构的逻辑表
- 远程环境 -- 另一台服务器,通过网络连接到本地,远程环境下的表是有真实数据+表结构的
这两张表的表定义相同:
应用场景
FEDERATED 存储引擎允许访问远程 MySQL 数据库中的数据,能够在不依赖复制或集群技术的情况下,实现跨服务器的数据访问
- 由于其跨服务器、低耦合的特性,FEDERATED 特别适合用于 轻量级的分布式系统 或 数据集市(Data Mart)环境,在不引入复杂分布式系统的情况下整合多个数据源
可以定义多个 FEDERATED 表,每个表都连接到不同的远程 MySQL 实例,也可以连接同一远程服务器上的不同数据库或表
- 这种机制确实实现了“轻量级”的分布式访问能力,但它不支持真正的分布式数据库特性(如数据分片、自动故障转移、分布式事务、一致性协议等)
- 更准确地说,它是一种“代理式”访问远程表的机制,而不是一个分布式数据库架构
操作
开启
默认不支持,可以在启动时通过 命令行选项 --federated / 在选项文件中配置 来启用
创建表
首先要保证一个远程服务器上的某表存在:
创建本地表:
- 主要在于connection字段 -- mysql协议(连接协议)://用户名:密码@主机地址:端口号/远程数据库名/远程表名
- 与远程服务器通信过程中使用的用户 -- 不建议使用root,而是创建一个专门的用户并授权
- 密码 -- 不能带有@符号,因为在字符串中@作为密码和主机地址的分隔符
- 主机地址 -- 根据实际的远程机器,确定ip地址 (必须得是MYSQL服务器)
- 远程表名 -- 建议与本地表名保持一致
对本地表进行数据插入
创建FEDERATED表后的本地文件:
- 仅仅只有一个sdi文件
插入数据:
- 远程表查询也可以看到数据更新
EXAMPLE存储引擎
EXAMPLE存储引擎什么也不做,它的存在目的是为开发人员说明如何开始编写一个新的存储引擎,是MySQL源代码中的一个示例
- 不支持索引和表分区
- 当创建一个EXAMPLE表时,不会在磁盘上创建任何文件
- 表中不能存储任何数据,查询时始终返回一个空结果
不同存储引擎的特性
(note )