Вставьте ключ MyISAM в таблицу INNODB - PullRequest
3 голосов
/ 02 августа 2011

Я использую эту структуру таблицы для системы TAG, подобной 'toxi'

table TAGS

+--------+-------------------+
| alias  | isactive          |  varchar(55), tinyint(1)
+--------+-------------------+
| party  | 1                 |

Engine: MyISAM (because I use some 'autocomplete' using this table (field:alias) for 
a %xxx% search

table TAGREL

+-------------+-------------------+
| tags_alias  | productID         |  varchar(55), int(11)
+-------------+-------------------+
|   party     | 15                |

Engine: InnoDB (i dont need full search here)
This TAGREL table uses tags.alias as FK (on update cascade, on delete cascade)  and 
product id as FK (on update no action, on delete cascade)

Я имею в виду, вся идея в том, что когда я обновляю какое-либо имя тега (или стираю его) или даже удаляюдля продукта отношение в TAGREL автоматически обновляется.

Но я даже не могу добавить запись в таблицу TAGREL, она говорит, что внешний ключ в таблице содержит ошибку TAGS, даже если данные, которые я вставляю, верны (действительный псевдоним TAGS и действительный идентификатор продукта)

Я не могу делать такие вещи на MySQL?Единственное решение (поскольку мне НУЖЕН полный поиск по таблице TAGS) - вручную обновлять тэгрел всякий раз, когда я обновляю какой-либо тэг ИЛИ стираю продукт?

Спасибо.

1 Ответ

9 голосов
/ 02 августа 2011

Вы не можете создавать внешние ключи в InnoDB таблицах, ссылающихся на MyISAM таблицы.

На определения внешних ключей распространяются следующие условия:

Обе таблицы должны быть таблицами InnoDB, и они не должны быть временными таблицами.

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

Так что да, вам придется вручную применять ограничения из кода приложения, если вы не измените механизм хранения.

LIKE '%XXX%' поиски не полнотекстовые; если вы на самом деле не указали полнотекстовый индекс и не используете функции сопоставления полнотекстовых файлов, вам не нужно использовать механизм MyISAM.

...