web-dev-qa-db-ja.com

プラグインデータベーステーブルにインデックスを追加する方法

開発中のプラグイン用にいくつか追加のテーブルを作成しました。これらのテーブルにインデックスを追加する必要があります。

これを行うためのWordPressの方法は何ですか?

dbDelta() を使用しても動作していないようで、ログにエラーが表示されません。

9
Milk

wpdb :: query() を使って任意 SQL文を実行することができます。

function
create_index ()
{
    global $wpdb ;

    $sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;

    $wpdb->query ($sql) ;

    return ;
}

注: $wpdb->query()任意 SQLを実行できるので、渡すステートメントに _ any _ ユーザー入力が含まれる場合は、 wpdb ::を使用してください。 prepare() SQLインジェクション攻撃から保護する。

しかし、これは疑問を投げかけます:あなたはどのようにあなたのプラグイン特有のテーブルを作成しましたか? 「手動」またはプログラムによるプログラム的には、$wpdb->query()を使っていませんか? 「手動で」行った場合は、プラグインのアクティブ化時に実際にテーブル(およびそれらのインデックス)を作成する必要があります。

この他のWPSE質問への優れた回答 を参照してください。プライベートテーブルの作成などを行うためのプラグインの有効化(および/または無効化とアンインストール)の方法については/を参照してください。

PRIMARY KEYの上にdbDeltaを使用すると、Word KEYを含めて他の列のインデックスを作成できます。

同義語のINDEXではなく、キーワードKEYを使用し、少なくとも1つのKEYを含める必要があります。

コアのschema.phpからの例:

CREATE TABLE $wpdb->termmeta (
  meta_id bigint(20) unsigned NOT NULL auto_increment,
  term_id bigint(20) unsigned NOT NULL default '0',
  meta_key varchar(255) default NULL,
  meta_value longtext,
  PRIMARY KEY  (meta_id),
  KEY term_id (term_id),
  KEY meta_key (meta_key($max_index_length))
) $charset_collate;

出典: codex - プラグインを使った表の作成

3
froger.me