2011-08-02 14 views
3

は私が挿入のMyISAMキー

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) 

タグシステムのように「toxi」のため、このテーブル構造を使用している私が意味する、全体的なアイデアは、私はいくつかのタグ名を更新(または消去時に、ということですTAGRELの関係は自動的に更新されます。

しかし、私もTAGRELテーブルにレコードを追加カント、それは私が挿入していたデータは、(有効なタグの別名、有効なプロダクトID)が正しい場合でも、テーブルタグのエラーの外部キーを言う

MySQLでこのようなことはできませんか? 唯一の解決策(TAGSテーブルの全検索が必要です)は、タグを更新するか製品を消去するたびにtagrelを手動で更新することですか?

ありがとうございました。

答えて

9

MyISAMテーブルを参照するテーブルInnoDBに外部キーを作成することはできません。

外部キーの定義は、以下の条件が適用され:

両方のテーブルはInnoDBのテーブルにする必要があり、彼らは一時テーブルであってはなりません。

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

そうです、あなたはストレージエンジンを変更しない場合は、手動でアプリケーションコードからの制約を適用する必要があります。

LIKE '%XXX%'検索はfulltextではありません。フルテキストインデックスを実際に指定し、フルテキストマッチング関数を使用している場合を除き、MyISAMエンジンを使う必要はありません。

+1

情報をいただきありがとうございます。 また、%xxx%ヒントのように感謝します。オートコンプリート機能では何も照合しないので、タグテーブルでMyISAMを使う必要はありません。 私の製品のテーブルはMyISAM(フルテキストを使用する)です。 products.idを外部キーとして使用するのに問題はありますか? (更新なし、削除済みアクション) –

関連する問題