mysql - 使 (user_id&music_id) 在 Likes 表和 Dislikes 表中唯一
问题描述
我在 mysql 中有 2 个基表:
用户
音乐
我喜欢和不喜欢带有 2 个字段的表格:
用户身份
音乐ID
现在我想在这 2 个表中插入唯一的项目。例如,如果用户 1 喜欢音乐 1.dislikes 表拒绝用户 1 和音乐 1。
有什么SQL方法吗?
解决方案
您必须重新设计您的数据库并合并likes
和dislikes
表并创建用于评级的布尔列
或者
您不能重新设计数据库您可以使用后端语言进行检查table 1
,检查后插入到table 2
或 SQL 方式
使用插入选择:
INSERT INTO likes (`music_id`,`user_id`)
SELECT 1, 2
FROM dislikes
WHERE (user_id <> 2 AND music_id <> 1)
LIMIT 1
使用触发器:
DROP TRIGGER IF EXISTS `dislike_check`;CREATE DEFINER=`root`@`localhost` TRIGGER `dislike_check` BEFORE INSERT ON `likes` FOR EACH ROW BEGIN
DECLARE dummy integer default 0;
SELECT 1 INTO dummy
FROM dislike
WHERE (user_id = NEW.user_id AND music_id = NEW.music_id);
IF (dummy = 1) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Any Message';
END IF;
END
推荐阅读
- google-cloud-spanner - 具有基于时间戳的历史记录的 Cloud Spanner 使用哈希
- xml - Ansible win_xml 删除 xml 元素失败
- android-studio - Android Studio 在哪里显示 `adb` 在启动期间正在做什么?
- r - R运行几个独立的单向方差分析和事后
- ruby-on-rails - 在 Rails PWA 中,我可以在清单文件中提供动态内容吗?
- binary - 将二进制文件的内容从本地复制到远程服务器
- scala - 如何在 Scala 中编写资源,同时仍然使用 scala-arm 正确关闭它们?
- reactjs - React 钩子被乱序调用
- java - 如何装饰现有 Java 对象的方法?
- reactjs - 如何将参数道具传递给 redux 容器