Spec-Zone .ru
спецификации, руководства, описания, API
|
Следующее является известными проблемами с MERGE
таблицы:
В версиях MySQL Server до 5.1.23, было возможно составить временные таблицы слияния с невременными таблицами дочернего элемента МИИЗЭМА.
От версий 5.1.23, ОБЪЕДИНИТЕСЬ, дочерние элементы были заблокированы через родительскую таблицу. Если родитель был временным, он не был заблокирован и таким образом, дочерние элементы не были заблокированы также. Параллельное использование таблиц MyISAM, поврежденных их.
Если Вы используете ALTER
TABLE
изменить a MERGE
таблица к другому механизму хранения,
отображение на базовые таблицы теряется. Вместо этого строки от базового MyISAM
таблицы копируются в измененную таблицу, которая тогда использует
указанный механизм хранения.
INSERT_METHOD
табличная опция для a MERGE
таблица показывает который базовый MyISAM
таблица, чтобы использовать для вставок в MERGE
таблица. Однако,
использование AUTO_INCREMENT
табличная опция для этого MyISAM
таблица не имеет никакого эффекта для вставок в MERGE
таблица, пока по крайней мере одна строка не была вставлена
непосредственно в MyISAM
таблица.
A MERGE
таблица не может поддержать ограничения
уникальности по всей таблице. Когда Вы выполняете INSERT
, данные входят в первое или последнее MyISAM
таблица (как определено INSERT_METHOD
опция). MySQL гарантирует, что
значения уникального ключа остаются уникальными в пределах этого MyISAM
таблица, но не по всем базовым таблицам в наборе.
Поскольку MERGE
механизм не может осуществить
уникальность по набору базовых таблиц, REPLACE
не работает как ожидалось. Два ключевых факта:
REPLACE
может обнаружить нарушения уникального ключа только в
базовой таблице, в которую это собирается записать (который определяется INSERT_METHOD
опция). Это отличается от нарушений в MERGE
таблица непосредственно.
Если REPLACE
обнаруживает нарушение уникального ключа, оно изменит
только соответствующую строку в базовой таблице, в которую оно пишет; то есть, первая или
последняя таблица, как определено INSERT_METHOD
опция.
Подобные соображения просят INSERT ... ON DUPLICATE KEY UPDATE
.
MERGE
таблицы не поддерживают разделение. Таким
образом, невозможно разделить a MERGE
таблица, ни может любой из a MERGE
базовая таблица MyISAM
таблицы быть
разделенным.
Недопустимо использовать ANALYZE TABLE
, REPAIR TABLE
, OPTIMIZE TABLE
, ALTER TABLE
, DROP
TABLE
, DELETE
без a WHERE
пункт, или TRUNCATE TABLE
на любой из таблиц, которые отображаются в открытое MERGE
таблица. Если Вы делаете так, MERGE
таблица может все еще обратиться к исходной таблице и привести к неожиданным результатам. Чтобы работать
вокруг этой проблемы, гарантируйте что нет MERGE
таблицы остаются
открытыми, выходя a FLUSH TABLES
оператор до выполнения любой из именованных операций.
Неожиданные результаты включают возможность что работа на MERGE
таблица
сообщит о табличном повреждении. Если это происходит после одной из именованных операций на базовом
MyISAM
таблицы, сообщение повреждения является побочным. Иметь дело с
этим, проблемой a FLUSH TABLES
оператор после изменения MyISAM
таблицы.
DROP TABLE
на
таблице, которая используется a MERGE
таблица не работает над Windows
потому что MERGE
табличное отображение механизма хранения скрывается от
верхнего уровня MySQL. Windows не разрешает открытым файлам быть удаленными, таким образом, сначала
следует сбросить все MERGE
таблицы (с FLUSH TABLES
) или отбрасывание MERGE
таблица прежде, чем отбросить таблицу.
Определение MyISAM
таблицы и MERGE
таблица проверяется, когда к таблицам получают доступ (например, как часть a SELECT
или INSERT
оператор). Проверки гарантируют что определения таблиц и родителя MERGE
табличное соответствие определения, сравнивая порядка следования столбцов, типы, размеры и связанный
индексирует. Если есть различие между таблицами, ошибка возвращается и сбои оператора. Поскольку эти
проверки имеют место, когда таблицы будут открыты, любые изменения к определению единственной таблицы,
включая изменения столбца, упорядочивание столбца, и изменения механизма заставят оператор перестать
работать.
Порядок индексирует в MERGE
таблица и ее базовые
таблицы должны быть тем же самым. Если Вы используете ALTER TABLE
добавить a UNIQUE
индексируйте к таблице, используемой в a MERGE
таблица, и затем использует
ALTER TABLE
чтобы добавить групповое индексируют на MERGE
таблица, индексировать упорядочивание отличается для таблиц, если
уже было групповое, индексируют в базовой таблице. (Это происходит потому что ALTER TABLE
помещает UNIQUE
индексирует
прежде групповой индексирует, чтобы облегчить быстрое обнаружение, делают дубликаты ключа.)
Следовательно, запросы на таблицах с таким индексирует, может возвратить неожиданные результаты.
Если Вы встречаетесь с сообщением об ошибке, подобным ОШИБКЕ 1017 (HY000): не Может найти файл:'tbl_name
.MRG' (errno: 2), это обычно указывает, что
некоторые из базовых таблиц не используют MyISAM
механизм хранения.
Подтвердите, что все эти таблицы MyISAM
.
Максимальное количество строк в a MERGE
таблица 264
(~1.844E+19; то же самое что касается a MyISAM
таблица). Не возможно
объединиться многократный MyISAM
таблицы в сингл MERGE
таблица, у которой были бы больше чем это число строк.
Использование базовых MyISAM
таблицы отличающейся
строки форматируют с родителем MERGE
таблица, как в настоящий момент
известно, перестала работать. См. Ошибку #32364.
Невозможно изменить список объединения невременного MERGE
таблица, когда LOCK TABLES
в действительности. Следующее не работает:
CREATE TABLE m1 ... ENGINE=MRG_MYISAM ...;LOCK TABLES t1 WRITE, t2 WRITE, m1 WRITE;ALTER TABLE m1 ... UNION=(t1,t2) ...;
Однако, можно сделать это с временным MERGE
таблица.
Невозможно создать a MERGE
таблица с CREATE ... SELECT
, ни один как временное MERGE
таблица, ни как невременное MERGE
таблица. Например:
CREATE TABLE m1 ... ENGINE=MRG_MYISAM ... SELECT ...;
Попытки сделать этот результат по ошибке: tbl_name
не
BASE TABLE
.
В некоторых случаях, отличие PACK_KEYS
табличная опция
оценивает среди MERGE
и базовые таблицы вызывают неожиданные результаты,
если базовые таблицы содержат CHAR
или BINARY
столбцы. Как обходное решение, использовать ALTER TABLE
гарантировать, что
у всех включенных таблиц есть то же самое PACK_KEYS
значение. (Ошибка
#50646)