繁体   English   中英

当一列可以包含空值时,在两列上的 MYSQL 中创建唯一索引的最佳方法

[英]Best way to create Unique index in MYSQL on two columns when one column can contain empty values

我想在两列上创建一个唯一索引,其中一个总是有一个值,而另一个默认情况下该值通常为 0。

在以下示例中,用户 ID 22 喜欢 2 个电视节目和 3 个电影。 我想防止用户想要两次相同的电视节目或电影的情况。 但是,我不能将 userid 和 movieid 或 userid 和 tvshowid 设置为唯一,因为在很多情况下,当电视节目之类的电视节目时,userid 与 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 语句来执行此操作?

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

计划 B:2 个表,每个表有 3 列。 一个谈论电视节目; 一部电影。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM