将MyISAM密钥插入INNODB表

时间:2011-08-02 00:36:01

标签: mysql tags innodb myisam

我正在使用此表结构来表示像TAGs系统一样的“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别名和有效的产品ID)

我不能在MySQL上做这种事情? 唯一的解决方案(因为我需要在TAGS表上进行完全搜索)是每当我更新某个标签或擦除产品时手动更新标签?

感谢。

1 个答案:

答案 0 :(得分:9)

您无法在引用InnoDB表的MyISAM表中创建外键。

  

外键定义符合以下条件:

     

两个表都必须是InnoDB表,它们不能是TEMPORARY表。

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

所以是的,如果不更改存储引擎,则必须手动强制执行应用程序代码中的约束。

LIKE '%XXX%'次搜索不是全文;除非您实际指定了全文索引并且正在使用全文匹配功能,否则您不需要使用MyISAM引擎。