2011-08-02 89 views
3

我使用這個表結構對喜歡的標籤系統「TOXI」插入的MyISAM鍵進入InnoDB表

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表,它說table標籤錯誤外鍵,即使我在插入數據是正確的(一個有效的標籤別名和有效的產品ID)

我不能在MySQL上做這種事情? 唯一的解決方案(因爲我需要對標籤表進行全面搜索)是每當我更新標籤或刪除產品時手動更新標籤?

謝謝。

回答

9

您不能在引用MyISAM表的InnoDB表中創建外鍵。

外鍵的定義是受以下條件:

兩個表必須是InnoDB表,他們不能是臨時表。

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操作) –