以下是已知的问题合并
表:
在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
表,但不会覆盖集合中的所有底层表。因为
合并
引擎不能在底层表集上强制唯一性,取代
没有像预期的那样工作。两个关键事实是:类似的考虑也适用于
插入……重复密钥更新
.合并
表不支持分区。也就是说,你不能分割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)