相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 36.3 mb
PDF (A4)- 36.4 mb
手册页(TGZ)- 237.6 kb
手册页(邮政编码)- 349.3 kb
信息(Gzip)- 3.4 mb
信息(邮政编码)- 3.4 mb
本手册节选

15.7.2 MERGE表问题

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

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

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

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

  • INSERT_METHOD表选项合并表指示底层的MyISAM表用于插入合并表格然而,使用AUTO_INCREMENT表格选项MyISAM表对插入合并表,直到至少有一行已直接插入MyISAM表格

  • 一个合并表不能在整个表上维护惟一性约束。当您执行插入,数据进入第一个或最后一个MyISAM表(由INSERT_METHOD选项)。MySQL确保唯一的键值在其中保持唯一MyISAM表,但不会覆盖集合中的所有底层表。

  • 因为合并引擎不能在底层表集上强制唯一性,取代没有像预期的那样工作。两个关键事实是:

    • 取代只能在将要写入的基础表中检测惟一键违反(这由INSERT_METHOD选项)。这不同于合并表本身。

    • 如果取代检测到一个唯一的键违反,它只改变底层表中它写入的相应行;即第一个表或最后一个表,由INSERT_METHOD选择。

    类似的考虑也适用于插入……重复密钥更新

  • 合并表不支持分区。也就是说,你不能分割a合并表,也不能任何一个合并表的基本MyISAM表分区。

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

    意外的结果包括操作的可能性合并表报告表损坏。如果这发生在底层的命名操作之一之后MyISAM表,腐败信息是虚假的。要处理这个问题,发出一个刷新表语句修改后的MyISAM表。

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

  • 的定义MyISAM表和合并表被访问时(例如,作为选择插入声明)。检查确保表和父表的定义合并通过比较列顺序、类型、大小和相关索引来匹配表定义。如果表之间有差异,则返回一个错误,语句失败。因为这些检查是在打开表时进行的,所以对单个表的定义的任何更改,包括列更改、列排序和引擎更改,都会导致语句失败。

  • 索引的顺序合并表及其底层表应该是相同的。如果你使用ALTER TABLE添加一个独特的中使用的表的索引合并表,然后使用ALTER TABLE对象上添加非惟一索引合并表中,如果基础表中已经存在非惟一索引,则该表的索引顺序将不同。(这是因为ALTER TABLE独特的索引放在非唯一索引之前,以方便快速检测重复键。)因此,对具有此类索引的表的查询可能返回意外结果。

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

  • 的最大行数合并表264(~ 1.844 e + 19;和a是一样的MyISAM表)。不可能合并多个MyISAM将表合并为单个合并表的行数大于这个数。

  • 使用的底层MyISAM具有父表的行格式不同的表合并表目前已知失败。看到错误# 32364。

  • 不能更改非临时对象的联合列表合并表的时候锁表在的效果。以下是工作:

    创建表m1…引擎= MRG_MYISAM……;锁表t1写,t2写,m1写;修改表m1…联盟= (t1, t2)…;

    但是,你可以用一个临时的合并表格

  • 您不能创建合并创建…选择,都不是临时的合并表,亦非临时合并表格例如:

    创建表m1…引擎= MRG_MYISAM……选择……;

    尝试这样做会导致一个错误:tbl_name不是基表

  • 在某些情况下,是不同的PACK_KEYS选项中的选项值合并如果底层表包含字符二进制列。作为一种变通方法,使用ALTER TABLE以确保所有涉及的表具有相同的PACK_KEYS价值。(错误# 50646)