小能豆

MySql 使用 ip 创建或更新行?

py

我有一张包含 ip 的表,以及该 ip 访问特定页面的次数计数。如果存在包含该 ip 的行,我想将计数加一,否则创建包含该 ip 的行并将计数设置为 1。

我试过

INSERT INTO mytable (ip,count) VALUES ('" + ip + "',1) ON DUPLICATE KEY UPDATE count=count+1;

但是 ip 不是唯一的也不是主要的,所以它只是不断创建具有相同 ip 的行。我尝试使 ip 唯一,但它不允许我这样做。当我尝试创建一个文本列并使其唯一时,phpmyadmin 说BLOB/TEXT column 'test' used in key specification without a key length

我可以使用两个语句。我该如何实现这一点?


阅读 16

收藏
2024-12-30

共1个答案

小能豆

更改ipUNSIGNED INT,在其上创建UNIQUE约束并使用它:

INSERT
INTO    mytable (ip, count)
VALUES  (INET_ATON($ip), 1)
ON DUPLICATE KEY
UPDATE
        count = count + 1

要以点分十进制表示法检索 IP(如192.168.1.1),请使用:

SELECT  INET_NTOA(ip)
FROM    mytable

您还可以创建前缀索引:

CREATE UNIQUE INDEX ux_mytaable_ip ON mytable (ip(15))

INT最好使用列来存储 IPv4 地址。

2024-12-30