相关文件10bet官方网站 本手册下载 从本手册中摘录

16.7.2合并表问题

以下是已知的问题合并表:

  • 在5.1.23之前的MySQL服务器版本中,可以使用非临时子MyISAM表创建临时合并表。

    从版本5.1.23开始,MERGE子表通过父表被锁定。如果父进程是临时的,它不会被锁定,所以子进程也不会被锁定。并行使用MyISAM表破坏了它们。

  • 如果你使用ALTER TABLE改变一个合并表到另一个存储引擎,映射到底层表丢失。相反,来自底层的行MyISAM将表复制到修改后的表中,然后修改后的表使用指定的存储引擎。

  • 插入_method.表选项合并表表明了哪个底层MyISAM表中用于插入的合并表格然而,使用the自动递增表选项MyISAM表对插入件没有效果合并表直到至少一行直接插入MyISAM表格

  • 一个合并表不能在整个表格中保持唯一性约束。当你执行一个,数据进入第一个或最后一个MyISAM表(由插入_method.选项)。MySQL确保唯一的键值在其中保持唯一MyISAM表,但不是集合中的所有基础表。

  • 因为合并引擎不能对基础表集强制唯一性,取代不按预期工作。两个关键事实是:

    • 取代只能在它写入的底层表中检测唯一的键违规(由此确定)插入_method.选项)。这与违规行为不同合并表本身。

    • 如果取代检测一个唯一的键违反,它只改变其写入的基础表中相应的行;即第一个或最后一个表插入_method.选项。

    类似的考虑申请插入...在重复的密钥更新时

  • 合并表不支持分区。也就是说,你不能分割a合并表,也不可以合并表的基本MyISAM表被分区。

  • 你不应该使用分析表修理表优化表ALTER TABLE删除表删除没有一个在哪里条款,或截断表映射到open的任何表上合并表格如果你这样做了,那么合并表仍可能引用原始表并产生意外结果。要解决这个问题,请确保没有合并通过发出a保持表格开放冲洗表语句,然后执行任何命名的操作。

    意外的结果包括可能的操作上合并表报告表损坏。如果此操作发生在基础上的指定操作之一之后MyISAM表,损坏消息是虚假的。要解决这个问题,请发布一个冲洗表修改后的声明MyISAM表。

  • 删除表在一个由a使用的桌子上合并表在Windows上不能工作,因为合并存储引擎的表映射对MySQL的上层是隐藏的。Windows不允许删除已打开的文件,因此您必须首先刷新所有文件合并桌子(有冲洗表)或放弃合并表前删除表。

  • 的定义MyISAM表和合并在访问表(例如,作为选择或者陈述)。检查确保表和父母的定义合并表定义通过比较列顺序,类型,大小和关联索引来匹配。如果表之间存在差异,则返回错误,并且语句失败。由于这些检查在打开表时进行,因此对单个表的定义的任何更改,包括列更改,列排序和引擎更改会导致语句失败。

  • 中索引的顺序合并表及其基础表应该相同。如果你使用ALTER TABLE添加A.独特的控件中使用的表的索引合并表,然后使用ALTER TABLE对象上添加非惟一索引合并表,如果基础表中已经有非唯一索引,则该表的索引顺序不同。(这是因为ALTER TABLEput独特的索引先于非唯一索引,方便快速检测重复键。)因此,对具有此类索引的表进行查询可能会返回意外的结果。

  • 如果遇到类似于错误1017 (HY000):无法找到文件:'tbl_name..mrg'(errno:2),它通常表明某些基础表不使用MyISAM存储引擎。确认所有这些表都是MyISAM

  • a中的最大行数合并表是264(~ 1.844 e + 19;a也是一样MyISAM表)。不可能合并多个MyISAM桌子成一个合并表将超过此数量的行。

  • 使用的底层MyISAM不同行格式的表格与父级合并表当前已知会失败。看到bug#32364。

  • 不能更改非临时文件的联合列表合并表的时候锁定表有效。以下是工作:

    创建表M1 ... Engine = MRG_MYISAM ......;锁定表T1写入,T2写入,M1写;改变表M1 ... Union =(T1,T2)......;

    但是,您可以使用临时工具来实现这一点合并表格

  • 您不能创建合并创建...选择,两者都不是暂时的合并餐桌,也非作为临时的合并表格例如:

    创建表M1 ... Engine = MRG_MYISAM ...选择......;

    尝试执行此结果的错误:tbl_name.不是基表

  • 在某些情况下,不同的情况pack_keys.表选项值之间的值合并如果底层表包含char或者二进制列。作为一个变通方法,使用ALTER TABLE确保所有涉及的表具有相同的pack_keys.价值。(bug#50646)