gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:58:04 25 4
gpt4 key购买 nike

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

group_id
game_id
user_id
message
last_update

我想让它不存在两行,其中第 x 行的 group_id 的值等于第 y 行的 group_id 的值,并且第 x 行的 user_id 的值也等于 user_id 的值第 y 行。

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

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 是一个值。但是,如果您将其中一列或两列设为可空,您可以拥有多行,这些行与 NULL 的定位相同。所以你可以有两个(或更多)行,其中 group_id IS NULL AND user_id = 1234

附带条件:上述情况适用于常用的 MySQL 存储引擎(MyISAM 和 InnoDB)。 MySQL 确实有将 NULL 视为唯一值的存储引擎,但您可能没有使用它们。

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

假设您已将此键设为主键,并且您现在希望在 group_id 列中允许 NULL。我目前不知道 group_id 是什么数据类型;我假设它当前是 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`)

关于mysql - 使用多列作为 mysql 的唯一标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3798555/

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