【问题标题】:MySQL Many-to-many relationship problemMySQL多对多关系问题
【发布时间】:2013-02-22 02:51:51
【问题描述】:

我在 mysql 中有 3 个表 artists tracksartist_tracks 我做了this文章中写的东西。

这是表artist:artist_id,artist_name tracks:track_id,track_name artist_tracks:artist_id,track_id

如何防止artist_tracks 表中的重复行?

【问题讨论】:

  • 如果您正确构建了主键,您应该无法创建重复行。
  • 声明artist_id track_id 作为artist_tracks 中的主键。

标签: mysql many-to-many


【解决方案1】:

围绕artist_idtrack_id 列创建一个复合主键。这是桥接表的标准做法。

ALTER TABLE artist_tracks DROP PRIMARY KEY;
ALTER TABLE artist_tracks ADD PRIMARY KEY (artist_id, track_id);

如果您正确地遵循了该文章,那么您应该已经拥有这样的密钥,因此不可能重复。

【讨论】:

    【解决方案2】:

    创建一个unique index

    CREATE UNIQUE INDEX artist_id_track_id ON artist_tracks (artist_id, track_id);
    

    【讨论】:

      【解决方案3】:

      如果您执行了链接中的操作,您已经在防止重复。

      CREATE TABLE `x` (
        `a_id` varchar(6) NOT NULL default '',
        `b_id` varchar(6) NOT NULL default '',
        PRIMARY KEY  (`a_id`,`b_id`)
      )
      

      此代码通过从艺术家和曲目的 id 中创建一个复合主键来为您做到这一点。

      【讨论】:

        【解决方案4】:

        您需要 group_concat 和 3 个表上的“复杂”连接, 看到这个小提琴:http://www.sqlfiddle.com/#!2/54c6f/3/0

        【讨论】:

          猜你喜欢
          • 2020-04-04
          • 2017-03-10
          • 2021-07-18
          • 1970-01-01
          • 2021-09-14
          • 2015-07-09
          • 2014-11-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多