MySQL - 当两个唯一列重复输入时,忽略插入到映射

时间:2016-12-08 20:02:02

标签: mysql

我有一个电影和演员的映射表。我插入数据的查询如下:"INSERT IGNORE INTO movie_actor_mapping (actor_id, movie_id) VALUES (%s, %s)"。在这里我必须忽略重复的行,例如,如果此数据存在,我必须忽略这样的数据:1 | 21 | 1。但是不知道如何修改我的查询或表格,因为这里有两列必须是唯一的。

CREATE TABLE `movie_actor_mapping` (
  `movie_actor_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `movie_id` int(10) unsigned DEFAULT NULL,
  `actor_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`movie_actor_id`),
)

此表中的数据如下所示:1 | 21 | 1

1 个答案:

答案 0 :(得分:1)

如果你有一个m:m的关系,你通常会得到交叉表中实体的两个键:所以在你的例子中你的表应该是这样的:

CREATE TABLE `movie_actor_mapping` (
    `movie_id` int(10) unsigned,
    `actor_id` int(10) unsigned,
     PRIMARY KEY (movie_id, actor_id),
)

现在,如果您插入一个包含已存在条目的新条目,您将收到SQL错误说明,您的主键无法重复输入,因为主键默认情况下也是唯一的