Answers:
您可以使用wpdb :: query()执行任意 SQL语句,包括数据定义语句,例如
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注入攻击。
但这引发了一个问题:您是如何创建特定于插件的表的?是“手动”还是编程方式?如果以编程方式,您是否不使用$wpdb->query()
?如果您是“手动”执行的,那么您确实应该在激活插件后创建表(及其索引)。
有关如何挂钩插件激活(和/或停用和卸载)以执行诸如创建私有表之类的操作,请参见另一个WPSE问题的出色答案。
使用dbDelta,在PRIMARY KEY的顶部,可以包括单词KEY来为其他列创建索引:
您必须使用关键字KEY而不是其同义词INDEX,并且必须至少包含一个KEY。
核心中来自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;