1.新建表(必须存在unique,作为判断是插入还是更新的依据)
DROP TABLE IF EXISTS `ipstats`;
CREATE TABLE `ipstats` (
`ip` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs NOT NULL,
`clicks` smallint UNSIGNED NOT NULL DEFAULT 0,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs NULL DEFAULT NULL,
UNIQUE INDEX `ip`(`ip`, `name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_zh_0900_as_cs ROW_FORMAT = Dynamic;
2.执行sql观察
INSERT INTO ipstats VALUES('192.168.0.1', 1,1) ON DUPLICATE KEY UPDATE clicks=clicks+1;
第一次执行:
查看该表索引
由于存在该唯一索引数据了,所以第二次应该是更新
再次执行
INSERT INTO ipstats VALUES('192.168.0.1', 1,1) ON DUPLICATE KEY UPDATE clicks=clicks+1;
查看结果
发现第二次做了更新操作,此sql可以简化插入或更新代码