Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 避免重复行,而不引用键或索引?_Mysql_Sql_Database - Fatal编程技术网

Mysql 避免重复行,而不引用键或索引?

Mysql 避免重复行,而不引用键或索引?,mysql,sql,database,Mysql,Sql,Database,我有一个MySQL表,其中每一行都是一集电视剧。看起来是这样的: showTitle | season | episode | episodeTitle | airdate | absoluteEpisode ---------------------------------------------------------------------------------------- The X-Files 5 12

我有一个MySQL表,其中每一行都是一集电视剧。看起来是这样的:

     showTitle  |  season   |  episode   |  episodeTitle  |  airdate  |  absoluteEpisode
 ----------------------------------------------------------------------------------------
 The X-Files          5          12          Bad Blood     1998-02-22         109
 The X-Files          5          13          Patient X     1998-03-01         110
(其中,
absoluteSpidence
是从第1集开始的该集的总计数。)

它使用我编写的Ruby程序填充,该程序从web服务获取数据。我希望定期再次运行该程序以获取新的剧集。接下来的问题是,如何避免添加已存在行的重复项?此表中没有一列适合用作主键或唯一字段

我有两个想法。第一种方法是创建一个新列,
md5
,其中包含所有这些值的md5散列,并使该列成为唯一的列,以防止添加具有相同数据的两行。这似乎是可行的,但会很混乱

我的第二个选择是使用。但我不能完全做到这一点。我的SQL查询是

INSERT INTO `tv`.`episodes` (showTitle,episodeTitle,season,episode,date,absoluteEpisode) 
SELECT '#{show}','#{title}','#{y['airdate']}' FROM `tv`.`episodes`
WHERE NOT EXISTS (SELECT * from `tv`.`episodes` 
WHERE showTitle='#{show}' AND episodeTitle='#{title}' AND season='#{season_string}' AND episode='#{y['seasonnum']}' AND date='#{y['airdate']}' AND absoluteEpisode='#{y['epnum']}'")
#{…}
位是Ruby变量。这会给我一个明显的错误
您的SQL语法中有一个错误


翻阅我能找到的关于这个主题的书籍和文档,我仍然不确定如何正确地执行这个查询,或者这是否是解决我问题的明智方法。如果有任何建议,我将不胜感激

为什么不从
showTitle
、季和集创建一个主键,这将解决问题,因为我猜,因为在同一季下,集号不能重复,这适用于同一个电视节目, 范例


x-files==>第1季==>第1集这将是作为一个单元的主键

问题中的完整错误消息是什么,您也可以在所有这些字段的组合上添加一个唯一的索引,而不是使用所有相关值的
md5
。可能会有所帮助。
(showTitle,season,Section)
看起来它可以用作主键或唯一键<代码>(showTitle,绝对情节)