MySQL多对多关系问题

时间:2011-08-17 18:45:28

标签: mysql many-to-many

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

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

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

4 个答案:

答案 0 :(得分:5)

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

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

如果您正确地遵循了该文章,那么您应该已经拥有了这样一个密钥,因此无法复制。

答案 1 :(得分:0)

创建unique index

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

答案 2 :(得分:0)

如果你做了链接中的内容,那么你已经在阻止重复了。

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

此代码通过从艺术家和曲目的ID中创建复合主键来为您完成。

答案 3 :(得分:0)

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