将MyISAM键插入到INNODB表中

3
我正在使用这个表格结构来实现一个类似于“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表上进行全面搜索)就是在更新某个标签 或 删除产品时手动更新tagrel?
谢谢。
1个回答

9
您不能在使用MyISAM存储引擎的表中创建指向其他表的外键。若需使用外键,需要保证两个表均为InnoDB存储引擎,并且不能是TEMPORARY表。

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

因此,如果您不更改存储引擎,那么您将需要从应用程序代码手动执行约束。

LIKE '%XXX%'搜索并非全文搜索。除非您实际上指定了全文索引并使用全文匹配函数,否则您无需使用MyISAM存储引擎。


1
嘿,谢谢你提供的信息。而且,感谢你对于 %xxx% 的提示。由于我在自动完成功能中没有使用任何匹配方法,所以在标签表上并不需要使用 MyISAM。但是我的产品表是一个 MyISAM(该表使用全文索引)。现在使用 products.id 作为外键有问题吗?(没有任何 onupdate,ondelete 操作) - Antonio Max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接