gpt4 book ai didi

mysql - 表中是否可以有切换 UNIQUE 索引?

转载 作者:行者123 更新时间:2023-11-29 09:45:40 25 4
gpt4 key购买 nike

我设置了一个服务器,在用户登录时记录其用户 ID、IP,如果该 IP 已存在于数据库中,则会在其 IP 和用户 ID 旁边添加一个出现,如下所示。重复的 key 当前位于 UserID 上。如果我没有输入任何 key ,那么它不会检测到具有该 IP 或 UserID 的行已经存在,而是为每次登录创建一个新行,这会导致很多麻烦。

我尝试将重复的 key 放在 IP 上,但如果用户使用相同的 IP 但不同的 UserID 访问服务器,则会在原始用户的 IP 中添加一个实例,因为该 IP 已存在并且新的 IP UserID 不会添加到数据库中。

表结构:

CREATE TABLE IF NOT EXISTS `ip_user` (
`userid` int(11) NOT NULL,
`ip` varchar(50) NOT NULL,
`occurencies` int(11) NOT NULL,
UNIQUE KEY `userid` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

登录查询:

glob.db.execute("""INSERT INTO ip_user (userid, ip, occurencies) VALUES (%s, %s, 1)
ON DUPLICATE KEY UPDATE occurencies = occurencies + 1""", [userID, ip])

我希望的结果是它会使用相应的 UserID 记录每个新 IP,但如果旧用户使用该 IP 登录,它会将其添加为事件。

谢谢!

最佳答案

我不太确定我明白你想要什么,但我假设你想记录每个不同的 userId 和 Ip 对。在这种情况下,您需要的是带有 userId 和 Ip 的唯一键(不确定 mysql 语法,抱歉):

CREATE TABLE IF NOT EXISTS `ip_user` (
`userid` int(11) NOT NULL,
`ip` varchar(50) NOT NULL,
`occurencies` int(11) NOT NULL,
UNIQUE KEY `userid_ip` (`userid`, `ip`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

编辑:此外,官方 mysql 文档在这方面可能会有所帮助:https://dev.mysql.com/doc/mysql/en/multiple-column-indexes.html

关于mysql - 表中是否可以有切换 UNIQUE 索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55730652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com