mysql - 当一列可以包含空值时,在两列上创建唯一索引的最佳方法
问题描述
我想在两列上创建一个唯一索引,其中一列总是有一个值,而另一列的默认值通常为 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 语句来执行此操作?
解决方案
将零更改为 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。
推荐阅读
- python - TypeError:不能在第 5 行将序列乘以“浮点”类型的非整数
- c# - 如何重构返回 List 的 C# 代码
? - c# - C# 排序列表
通过它的属性,即日期时间字符串 - c# - 由于错误提示我必须提供请求正文,无法发布到商家 API
- python - 如何使用烧瓶播放 mp3 声音?
- python - 数据透视表引发错误唯一值索引错误
- javascript - 使用 javascript 脚本提交 google 表单
- drake - 是否有与 PostureChangeConstraint 等效的 MultiBody?
- ios - iOS 自动更新订阅和收据验证说明
- docker - 在 docker compose 中更改容器端口