如何向插件数据库表添加索引

时间:2016-09-30 作者:Milk

我为正在开发的插件创建了一些额外的表,需要向这些表添加索引。

WordPress是如何做到这一点的?

使用dbDelta() 似乎不起作用,而且我在日志中没有看到任何错误。

2 个回复
最合适的回答,由SO网友:Paul \'Sparrow Hawk\' Biron 整理而成

可以使用执行任意SQL语句wpdb::query(), 包括数据定义语句,例如。

function
create_index ()
{
    global $wpdb ;

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

    $wpdb->query ($sql) ;

    return ;
}
Note: 因为$wpdb->query() 如果传递给它的语句包含ANY 用户输入,则应使用wpdb::prepare() 防止SQL注入攻击。

但这引发了一个问题:您是如何创建特定于插件的表的?“手动”还是编程?如果以编程方式,是否使用$wpdb->query()? 如果您是“手动”完成的,那么您真的应该在插件激活时创建表(及其索引)。

查看以下问题的最佳答案this other WPSE question 了解如何挂接插件激活(和/或停用和卸载)以创建私有表。

SO网友:froger.me

使用dbDelta,在主键的顶部,可以包含word键来为其他列创建索引:

必须使用关键字key而不是其同义词索引,并且必须至少包含一个键。

架构中的示例。核心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 - Creating Tables with Plugins