【问题标题】:Best way to create Unique index in MYSQL on two columns when one column can contain empty values当一列可以包含空值时,在两列上创建唯一索引的最佳方法
【发布时间】:2020-07-07 09:05:04
【问题描述】:

我想在两列上创建一个唯一索引,其中一列始终有一个值,而另一列的默认值通常为 0。

在以下示例中,用户 ID 22 喜欢了 2 个电视节目和 3 部电影。我想防止用户想要两次相同的电视节目或电影的情况。但是,我不能将用户 ID 和电影 ID 或用户 ID 和 tvshowid 设为唯一,因为在许多情况下,用户 ID 与 0 配对,而类似的电视节目。

Likes
id|userid|movieid|tvshowid
1|22|0|33
2|22|0|34
3|22|66|0
4|22|67|0
5|22|68|0

我可以将所有的 0 更改为 NULL,但 NULL 往往会在客户端上产生问题。

当一列有多个空值时,在两列上创建唯一索引的最佳方法是什么?

如果需要将所有的 0 更改为 NULL,是否有有效的 MYSQL 语句来执行此操作?

【问题讨论】:

    标签: mysql indexing null unique


    【解决方案1】:

    将零更改为 NULL:

    UPDATE Likes SET movieid = NULL WHERE movieid = 0;
    UPDATE Likes SET tvshowid = NULL WHERE tvshowid = 0;
    

    创建两个唯一键,一个用于电影,一个用于电视节目。

    ALTER TABLE Likes
      ADD UNIQUE KEY (userid, movieid),
      ADD UNIQUE KEY (userid, tvshowid);
    

    我不知道您所说的导致客户端出现问题的 NULL 是什么意思。任何可以使用 SQL 的客户端都应该能够处理 NULL。

    【讨论】:

    • 这意味着在 iphone 上需要额外的步骤,以确保在尝试为对象设置值之前捕获所有这些值,因为它们会导致异常。
    • 好的,那就是你必须做的。类似于在将其用作除数之前必须检查值 0。
    【解决方案2】:

    B 计划:2 张桌子,每张桌子有 3 列。一个谈论电视节目;一个用于电影。

    【讨论】:

      猜你喜欢
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2016-04-14
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      相关资源
      最近更新 更多