Como adicionar um índice à tabela de banco de dados de plug-in

10

Criei algumas tabelas adicionais para um plug-in que estou desenvolvendo e preciso adicionar índices a essas tabelas.

Qual é a maneira do WordPress de fazer isso?

O uso dbDelta()não parece estar funcionando e não vejo nenhum erro nos logs.

Leite
fonte

Respostas:

4

Você pode executar instruções SQL arbitrárias com wpdb :: query () , incluindo instruções de definição de dados, por exemplo

function
create_index ()
{
    global $wpdb ;

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

    $wpdb->query ($sql) ;

    return ;
}

Nota: Como $wpdb->query()pode executar SQL arbitrário , se a instrução que você passar contiver QUALQUER entrada do usuário, use wpdb :: prepare () para se proteger contra ataques de injeção de SQL.

Mas isso levanta a questão: como você criou suas tabelas específicas de plugins? "Manualmente" ou programaticamente? Se programaticamente, você não usou $wpdb->query()? Se você o fez "manualmente", realmente deve criar as tabelas (e seus índices) após a ativação do plug-in.

Veja a excelente resposta a essa outra pergunta do WPSE sobre como conectar-se à ativação do plug-in (e / ou desativação e desinstalação) para fazer coisas como criar tabelas privadas.

Paul 'Sparrow Hawk' Biron
fonte
Obrigado por responder a esta pergunta, apesar de ter cinco meses. Acabei fazendo isso, mas não tinha certeza se era o "caminho certo". Será uma grande ajuda na próxima vez que eu tentar fazer isso.
Milk
@ Milk Meu prazer. Imaginei que você já resolveu o seu problema ou desistiu :-) Respondi (até cinco horas depois que você pediu) para ajudar outras pessoas que têm o mesmo problema, pesquisar no WPSE e encontrar sua pergunta.
Paul 'Sparrow Hawk' Biron /
3

Usando dbDelta, em cima de uma CHAVE PRIMÁRIA, você pode incluir a palavra CHAVE para criar um índice para outras colunas:

Você deve usar a palavra-chave KEY em vez de seu sinônimo INDEX e incluir pelo menos uma KEY.

Exemplo de schema.php no núcleo:

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;

Fonte: codex - Criando tabelas com plugins

froger.me
fonte