首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能在表中有一个切换唯一的索引?

是否有可能在表中有一个切换唯一的索引?
EN

Stack Overflow用户
提问于 2019-04-17 15:00:45
回答 1查看 22关注 0票数 0

我设置了一个服务器,在用户登录时记录他们的userID、IP,如果IP已经存在于数据库中,它会在他们的IP和userID旁边添加一个事件,如下所示。重复键当前在UserID上。如果我没有输入键,那么它就没有检测到带有IP或UserID的行已经存在,而是为每次登录创建了一个新行,这会带来很多麻烦。

我尝试在IP上放置重复密钥,但是如果用户使用相同的IP访问服务器,但使用不同的UserID,它将向原始用户的IP添加一个事件,因为IP已经存在,新的UserID不会添加到数据库中。

表结构:

代码语言:javascript
复制
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;

查询登录:

代码语言:javascript
复制
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登录,它将添加到相应的IP中。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-17 15:07:39

我不太确定我是否理解您想要的内容,但我假设您希望记录每个不同的userId和Ip对。在这种情况下,您需要的是使用userId和Ip的唯一键(不确定mysql语法,对不起):

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55730652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档