我正在使用luasql。我有两个这种类型的表:
CREATE TABLE `ipstats` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`ip` VARCHAR(15) NOT NULL,
`last_used` DATETIME NOT NULL DEFAULT '1981-09-30 00:00:00',
PRIMARY KEY (`id`),
UNIQUE INDEX `ip` (`ip`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
和另一个表ipnstats:
CREATE TABLE `ipnstats` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`ipstats_id` INT(10) UNSIGNED NOT NULL,
`nick` VARCHAR(32) NOT NULL,
`used_times` INT(10) UNSIGNED NOT NULL,
`last_used` DATETIME NOT NULL DEFAULT '1981-09-30 00:00:00',
PRIMARY KEY (`id`),
INDEX `ipstats_id` (`ipstats_id`),
INDEX `nick` (`nick`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
现在,我想在这里实现的是,在我的ipnstats
表中,used_times
的值将会更新 IFF(当且仅当如此)表中的索引(nickname
和ipstats_id
)是匹配的。我的插入/更新命令如下:
INSERT INTO `ipstats_nicks` (`ipstats_id`, `nick`, `last_used`)
VALUES ( %d, '%s', '%s' )
ON DUPLICATE KEY
UPDATE `last_used` = '%s', `used_times` = `used_times`+1
然后我使用变量格式化此字符串。但这并没有在表格中给出我想要的更新。它只是继续将数据插入表中。
感谢任何帮助。
答案 0 :(得分:1)
有两个问题:
ON DUPLICATE KEY UPDATE
仅适用于 UNIQUE 索引。您的索引不是唯一的。也许您真正想要的是一个独特的多列索引?
UNIQUE INDEX `ipstats_id_nick` (`ipstats_id`, `nick`)