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

16.7.2合并表问题

以下是已知问题合并表:

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

    从版本5.1.23,合并子子通过父表锁定。如果父母是临时的,则不会被锁定,因此儿童也没有锁定。并行使用Myisam表损坏了它们。

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

  • 插入_method.表选项合并表表明了哪个底层myisam.用于插入的表合并桌子。但是,使用自动递增表选项myisam.表对插入件没有效果合并表直到至少一行直接插入myisam.桌子。

  • 一种合并表不能在整个表格中保持唯一性约束。当你执行一个,数据进入第一个或最后一个myisam.表(由插入_method.选项)。MySQL确保唯一的键值在此内部仍然是独一无二的myisam.表,但没有超过集合中的所有底层表。

  • 因为这合并引擎不能在底层表集中强制执行唯一性,代替不按预期工作。两个关键事实是:

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

    • 如果代替检测唯一的密钥违规,它只会在它写入的底层表中更改相应的行;也就是说,第一个或最后一张表,由此确定插入_method.选项。

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

  • 合并表不支持分区。也就是说,你不能分区合并表,也不可以合并表的底层myisam.表被分区。

  • 你不应该使用分析表修复表优化表改变表下拉表删除没有在哪里条款,或者截断表在映射到打开的任何表上合并桌子。如果你这样做,合并表仍可能引用原始表并产生意外结果。要解决这个问题,请确保没有合并桌子通过发出a仍然开放冲洗表在执行任何命名操作之前的声明。

    意外结果包括该操作的可能性合并表报告表损坏。如果在基础上的命名操作之一之后发生这种情况myisam.表,腐败消息是虚假的。要处理这一点,发布一个冲洗表修改后的声明myisam.表。

  • 下拉表在一个由a使用的桌子上合并表不适用于窗户,因为合并存储引擎的表映射是隐藏的来自MySQL的上层。Windows不允许删除打开文件,所以您首先必须刷新所有合并桌子(有冲洗表)或放下合并表滴表之前。

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

  • 索引的顺序合并表及其底层表应相同。如果你使用改变表添加A.独特索引到一个表中使用的表合并表,然后使用改变表在上添加undunique索引合并表,如果在底层表中存在undunique索引,则表格排序对于表不同。(这发生了因为改变表put独特非唯一索引前的索引,以促进重复键的快速检测。)因此,具有此类索引的表的查询可能会返回意外结果。

  • 如果您遇到类似的错误消息错误1017(hy000):找不到文件:'tbl_name..mrg'(errno:2),它通常表示一些底层表格不使用myisam.存储引擎。确认所有这些表都是myisam.

  • a中的最大行数合并表是264.(〜1.844e + 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或者二进制列。作为解决方法,使用改变表确保所有涉及的表都有相同的表pack_keys.价值。(bug#50646)