Как добавить индекс в таблицу базы данных плагинов

Я создал несколько дополнительных таблиц для плагина, который я разрабатываю, и вам нужно добавить индексы к этим таблицам.

Каков способ WordPress для этого?

Использование dbDelta() , похоже, не работает, и я не вижу ошибок в журналах.

7 голосов | спросил Milk 30 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 30 Sep 2016 04:44:44 +0300 2016, 04:44:44

2 ответа


4

Вы можете выполнить SQL-выражения произвольные с помощью wpdb: : query () , включая инструкции определения данных, например

function
create_index ()
{
    global $wpdb ;

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

    $wpdb->query ($sql) ;

    return ;
}

Примечание: Поскольку $wpdb->query() может выполнить произвольный SQL, если оператор вы переходите к нему, содержит пользовательский ввод ЛЮБОЙ , тогда вы должны использовать wpdb :: prepare () для защиты от атак SQL Injection.

Но возникает вопрос: как вы создали свои таблицы, зависящие от плагина? «Вручную» или программно? Если программно, вы не использовали $wpdb->query()? Если вы сделали это «вручную», вам действительно нужно создать таблицы (и их индексы) при активации плагинов.

См. отличный ответ этот другой вопрос WPSE о том, как подключиться к активации плагина (и /или деактивировать и удалить), чтобы делать что-то вроде создания личных таблиц.

ответил Paul 'Sparrow Hawk' Biron 8 MaramWed, 08 Mar 2017 05:00:52 +03002017-03-08T05:00:52+03:0005 2017, 05:00:52
1

Используя dbDelta, помимо PRIMARY KEY, вы можете включить слово KEY для создания индекса для других столбцов:

  

Вы должны использовать ключевое слово KEY, а не его синоним INDEX, и вы должны включить хотя бы один КЛЮЧ.

Пример из 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 - Создание таблиц с плагинами

ответил Paul 'Sparrow Hawk' Biron 8 MaramWed, 08 Mar 2017 05:00:52 +03002017-03-08T05:00:52+03:0005 2017, 05:00:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132