当前位置: 首页 > 面试题库 >

使用多列作为mysql的唯一标识符

云季萌
2023-03-14
问题内容

我有一个包含以下各列的mysql表:

group_id
game_id
user_id
message
last_update

我想使其不存在任何两行,其中行x的group_id的值等于行y的group_id的值,行x的user_id的值也等于行y的user_id的值。

因此,例如,假设我插入以下值:

group_id = 783
game_id = 34
user_id = 29237
message = none
last_update = 11233452

上面的数据,即使一个mysql查询试图插入它,如果已经存在具有group_id和user_id相同组合的行,也不应创建新行。有没有办法做到这一点?基本上,我试图使两列协同工作,就像一个唯一索引一样。


问题答案:

是的,MySQL提供了执行此操作的功能。

ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)

我不知道您正在使用此表做什么,但听起来这个唯一键可能是该表主键的最佳选择。主键也自动是唯一键。如果您决定将其设置为主键,请执行以下操作:

ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)

(如果收到错误消息,提示已经存在主键,请发出ALTER TABLE MyTable DROP PRIMARY KEY然后重复上述命令。)

编辑: 回应用户评论

NULL对于唯一键覆盖的列,不能有多个具有相同非值的行。因此group_id = 0 AND user_id = 5,例如,您不能有两行。0是一个值。但是,如果使一列或两列 都可为 空,则 可以
包含多行,直到NULLs的位置相同。因此,您可以在其中拥有两行(或更多行)group_id IS NULL AND user_id = 1234

Proviso:以上对于两个常用的MySQL存储引擎(MyISAM和InnoDB)都是正确的。MySQL确实有NULL被视为唯一值的存储引擎,但是您可能没有使用它们。

如果将一列或两列设置为可空,则唯一键不能为主键-主键必须位于的列上NOT NULL

假设您已将此键设为主键,现在想NULL在该group_id列中允许。我不知道目前group_id是什么数据类型。我假设它是current
INT UNSIGNED NOT NULL,但是如果不是这个,则必须修改以下内容。您将不再能够将此键用作主键。这是您可以运行以进行所需更改的命令:

ALTER TABLE MyTable
    DROP PRIMARY KEY,
    MODIFY group_id INT UNSIGNED,
    ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)


 类似资料:
  • 问题内容: 我想在服务器中使用列作为表 但这出错了 当我将的类型更改为varchar时..它起作用了! 你能告诉我是否可以使文本列为 问题答案: 基本上,您不能将列用作键。因为实际上这么大的列将不是唯一的,并且可能会出现更多重复的情况。因此,寻找方法并将该输出用作UNIQUE约束。 希望这对您有帮助

  • 唯一标识符 guid(length = 32, firstU = true, radix = 62) 该函数可以生产一个全局唯一、随机的guid,默认首字母为u,可以用于当做元素的id或者class名等需要唯一,随机字符串的地方,因为id或者class不能以数字开头。 length <Number | null> guid的长度,默认为32,如果取值null,则按rfc4122标准生成对应格式的随

  • 问题内容: TLDR;如何在基于事件的编程模型中标识套接字。 我刚刚开始使用node.js,过去我在C ++和PHP sockets()中完成了大部分编码工作,所以node.js对我来说是非常新的东西。 在c ++中,我们可以通过编写主套接字(例如服务器)来侦听新的连接和更改,然后相应地处理这些连接,从而完成识别套接字的工作。 问题答案: 如果您在寻找实际的套接字而不是socket.io,那么它们

  • 问题内容: 我需要做一些实验,并且需要知道javascript中对象的某种唯一标识符,因此我可以查看它们是否相同。我不想使用相等运算符,我需要类似python中的id()函数的功能。 是否存在这样的东西? 问题答案: 更新 我下面的原始答案写在6年前,其风格与时代和我的理解相吻合。为了回应评论中的某些对话,一种更现代的方法如下: 如果您对旧版浏览器有要求,请在此处查看的浏览器兼容性。 原始答案保留

  • 本文向大家介绍Python通用唯一标识符uuid模块使用案例,包括了Python通用唯一标识符uuid模块使用案例的使用技巧和注意事项,需要的朋友参考一下 1. 背景知识:   UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机数, 伪随机数来保证生

  • 我使用下一个endpoint来获取“https://graph.microsoft.com/v1.0/users/?$select=id,displayName,mail,userPrincipalName“根据文档:https://learn.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0没有关于用户资源类型的唯一