Cómo agregar un índice a la tabla de base de datos de complementos

10

He creado algunas tablas adicionales para un complemento que estoy desarrollando y necesito agregar índices a estas tablas.

¿Cuál es la forma en que WordPress hace esto?

El uso dbDelta()no parece funcionar, y no veo ningún error en los registros.

Leche
fuente

Respuestas:

4

Puede ejecutar sentencias SQL arbitrarias con wpdb :: query () , incluidas las declaraciones de definición de datos, p. Ej.

function
create_index ()
{
    global $wpdb ;

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

    $wpdb->query ($sql) ;

    return ;
}

Nota: Debido a que $wpdb->query()puede ejecutar SQL arbitrario , si la declaración que le pasa contiene CUALQUIER entrada del usuario, entonces debe usar wpdb :: prepare () para protegerse contra los ataques de inyección SQL.

Pero esto plantea la pregunta: ¿cómo creó sus tablas específicas de complementos? ¿"Manualmente" o programáticamente? Si programáticamente, ¿no lo usaste $wpdb->query()? Si lo hizo "manualmente", realmente debería crear las tablas (y sus índices) tras la activación del complemento.

Vea la excelente respuesta a esta otra pregunta WPSE sobre cómo conectarse a la activación del complemento (y / o desactivación y desinstalación) para hacer cosas como crear tablas privadas.

Paul 'Gorrión Halcón' Biron
fuente
Gracias por responder esta pregunta a pesar de que tiene 5 meses. Terminé haciendo esto pero no estaba seguro de si era la "forma correcta". Será de gran ayuda la próxima vez que intente hacer esto.
Leche
@ Leche Un placer. Supuse que ya había resuelto su problema o se había dado por vencido :-) Respondí (incluso 5 meses después de que lo solicitó) para ayudar a otros que tienen el mismo problema y buscar en WPSE y encontrar su pregunta.
Paul 'Sparrow Hawk' Biron
3

Con dbDelta, además de una CLAVE PRIMARIA, puede incluir la palabra CLAVE para crear un índice para otras columnas:

Debe usar la palabra clave CLAVE en lugar de su sinónimo ÍNDICE y debe incluir al menos una CLAVE.

Ejemplo de schema.php en core:

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;

Fuente: codex - Crear tablas con complementos

froger.me
fuente