首页 > 解决方案 > 当一列可以包含空值时,在两列上创建唯一索引的最佳方法

问题描述

我想在两列上创建一个唯一索引,其中一列总是有一个值,而另一列的默认值通常为 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 语句来执行此操作?

标签: mysqlindexingnullunique

解决方案


将零更改为 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。


推荐阅读