好的,所以我试图将团队varchar设置为UNIQUE KEY,以便它在以下语句中触发重复键功能
$sql = "INSERT INTO {$wpdb->prefix}vote4team (team,votes) VALUES (%s,%i) ON DUPLICATE KEY UPDATE votes = votes + %i";
我错过了什么?
这是使用我的PluginFunctions.php
创建db函数function create_vote4team_db() {
global $wpdb;
global $vote4team_db_version;
$table_name = $wpdb->prefix . "vote4team";
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
team varchar(255) NOT NULL,
votes int(11) NOT NULL,
UNIQUE KEY id (id),
UNIQUE KEY team (team)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
add_option( 'vote4team_db_version', $vote4team_db_version );
}
register_activation_hook( __FILE__, 'create_vote4team_db' );
答案 0 :(得分:2)
我最终在phpmyAmin和一些SQL文档的帮助下解决了这个问题。显然,唯一键的大小有限。一旦我改变了
team varchar(255) NOT NULL
更像team varchar(200) NOT NULL
有效。
答案 1 :(得分:0)
我猜这个语句会因类型转换失败而失败而不是唯一约束失败而失败。
在你的create语句中,有一个名为“id”的唯一索引,其中包含一列“id”,第二个索引称为“city”,其中包含一列“team”。
在insert语句中,您尝试更新名为“city”的列,该列可能应为“team”,并且您的values子句的字符串和整数值已反转。
答案 2 :(得分:0)
尝试将id设为主键,结果将与两个唯一键相同。
我在自己的插件中有表定义主键和唯一键,但我从未尝试过两个唯一键。注意关键字PRIMARY KEY和定义之间的两个空格,dbdelta有点古怪,出于某种原因需要两个空格。
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
team varchar(255) NOT NULL,
votes int(11) NOT NULL,
PRIMARY KEY id (id),
UNIQUE KEY team (team)
) $charset_collate;";