【问题标题】:Mysql - make unique constraints on both fields [duplicate]Mysql - 对两个字段进行唯一约束[重复]
【发布时间】:2021-08-28 06:27:21
【问题描述】:

我正在使用 mysql (mariadb)。 我有一张表“events_ratings”,其中包含 4 列

CREATE TABLE `event_ratings` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_event` int(11) NOT NULL,
  `rating` int(1) NOT NULL,
  `id_user` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
  PRIMARY KEY `id`,
  ADD CONSTRAINT `idevent` FOREIGN KEY (`id_event`) REFERENCES `events_fb` (`id`) ON UPDATE CASCADE,
  ADD CONSTRAINT `iduser` FOREIGN KEY (`id_user`) REFERENCES `users` (`id`) ON UPDATE CASCADE;
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  

此表的目的是提供用户评分,因此:

  • 每个用户都可以对事件进行评分(基于他唯一的“id_user”)。用户可以根据需要对许多事件进行评分,但不能对同一事件进行评分。

所以基本上 id_user 和 id_event 不应该有重复的值。 我知道如何使列唯一,但如何基于两个字段进行约束?

谢谢

【问题讨论】:

    标签: mysql sql mariadb


    【解决方案1】:

    您需要添加一个唯一约束并在其中指定两个字段,如下所示:

    ALTER TABLE `events_rating` ADD UNIQUE `unique_user_event`(`id_user`, `id_event`);
    

    【讨论】:

    • 谢谢!如果我想擦除最后一个值并在 update 上使用新值进行更新怎么办?目前它工作正常,但用户无法更新其评级。有什么线索吗?
    • @yoann84 嘿,试试INSERT INTO events_ratings VALUES(<put your values here>) as new ON DUPLICATE KEY UPDATE ratings=new.ratings。这将尝试插入一个新行,如果遇到重复,它将用新的评级替换旧评级。
    猜你喜欢
    • 2011-01-31
    • 2013-01-19
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多