web-dev-qa-db-fra.com

Comment ajouter un index à la table de base de données de plug-ins

J'ai créé des tables supplémentaires pour un plugin que je développe et j'ai besoin d'ajouter des index à ces tables.

Quelle est la façon dont WordPress fait cela?

Utiliser dbDelta() ne semble pas fonctionner et je ne vois aucune erreur dans les journaux.

9
Milk

Vous pouvez exécuter les instructions arbitraires SQL avec wpdb :: query () , y compris les instructions de définition de données, par exemple.

function
create_index ()
{
    global $wpdb ;

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

    $wpdb->query ($sql) ;

    return ;
}

Remarque: Étant donné que $wpdb->query() peut exécuter arbitraire SQL, si l'instruction que vous lui transmettez contient une entréeTOUTE ENTRÉEutilisateur, vous devez utiliser wpdb :: prepare () pour se protéger contre les attaques par injection SQL.

Mais cela soulève la question: comment avez-vous créé vos tables spécifiques aux plugins? "Manuellement" ou par programme? Si par programme, n’avez-vous pas utilisé $wpdb->query()? Si vous l'avez fait "manuellement", alors vous devriez vraiment créer les tables (et leurs index) lors de l'activation du plugin.

Voir l'excellente réponse à cette autre question WPSE pour savoir comment se connecter à l'activation de plug-ins (et/ou à la désactivation et à la désinstallation) pour créer des tables privées.

À l'aide de dbDelta, en plus d'une clé primaire, vous pouvez inclure la clé Word pour créer un index pour d'autres colonnes:

Vous devez utiliser la clé Word KEY plutôt que son synonyme INDEX et vous devez inclure au moins une clé.

Exemple de schema.php dans le noyau:

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;

Source: codex - Créer des tables avec des plugins

3
froger.me