我有下表:
CREATE TABLE `timeline_lists` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`list_type` int(11) NOT NULL,
`s_object_id` int(11) NOT NULL DEFAULT '0',
`group_id` int(11) DEFAULT '0',
`new_items_count` int(11) DEFAULT NULL,
`last_accessed_on` datetime DEFAULT NULL,
`last_updated_on` datetime DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`,`user_id`),
KEY `unique_index` (`user_id`,`list_type`,`s_object_id`,`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
每次我运行以下查询时,都会添加一条新记录:
INSERT INTO `timeline_lists` (`id`,`user_id`,`list_type`,`s_object_id`,`group_id`,`new_items_count`,`last_accessed_on`,`last_updated_on`,`created_at`,`updated_at`)
VALUES
(NULL,18724,11,0,0,5,'2014-09-23 16:37:46',NULL,'2014-09-23 16:37:48','2014-09-23 16:37:48')
ON DUPLICATE KEY UPDATE
`timeline_lists`.`new_items_count`=VALUES(`new_items_count`),
`timeline_lists`.`last_accessed_on`=VALUES(`last_accessed_on`),
`timeline_lists`.`updated_at`=VALUES(`updated_at`)
我希望唯一索引效果和字段只会得到更新,如果我调整此查询 5 次,我将在数据库中获得 5 条记录,而不仅仅是 1 条。
我在这里想念什么?
您的桌子上没有
UNIQUE
键,只有列PRIMARY KEY
上的aAUTO_INCREMENT
永远不会触发,ON DUPLICATE KEY
因为您可能已经知道,您正在传递id = NULL
.改变这个:
对此: