如何将记录复制到表中,但如果它们已经存在则不会

时间:2012-06-08 22:58:42

标签: mysql copy duplicates

我有3个表用作培训文档的归档机制,文档表(a30),培训手册表,存储不同培训手册(a36trnman)的标题和标识,以及用于存储与不同手册相关联的文档的ID(a31)。

在我的应用程序中,我允许用户复制培训手册及其相关文档并使其成为自己的文档。但是,我遇到了一个问题,因为不同的培训手册可能包含相同的文档,然后在他们的培训手册中会有重复的文档(他们可能已修改过,并且希望保留这些文档)。因此,我需要一个重复的培训手册查询,检查该用户是否已存在正在复制的手册中的文档,如果存在,则将其保留到位,并在表{{1}中创建新记录将现有(旧)文档与刚刚添加的培训手册相关联。

我的文件

a31

我当前的查询1.复制培训手册,2。存储培训手册id,然后将相关文档id的列表复制到表a31,4中.4。将文档复制到表a30中。如何检查a30中现有重复项的查询并保留它们,但仍然参考新的培训手册添加a31的条目?

CREATE TABLE `a30` (
  `docname` varchar(250) NOT NULL,
  `docfile` varchar(300) NOT NULL,
  `docfilepdf` varchar(300) NOT NULL,
  `ctgry` int(8) unsigned zerofill NOT NULL,
  `subctgry` int(8) unsigned zerofill NOT NULL,
  `id` int(8) unsigned zerofill NOT NULL auto_increment,
  `creator` int(8) unsigned zerofill NOT NULL,
  `smmry` varchar(60) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='haha!! training materials!' AUTO_INCREMENT=17 ;


CREATE TABLE `a31` (
  `pntryid` int(8) unsigned zerofill NOT NULL auto_increment,
  `pdocid` int(8) unsigned zerofill NOT NULL,
  `trnmannum` int(8) unsigned zerofill NOT NULL,
  PRIMARY KEY  (`pntryid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='document pantry' AUTO_INCREMENT=43 ;


CREATE TABLE `a36trnman` (
  `unik` int(8) NOT NULL auto_increment,
  `user` int(8) NOT NULL,
  `ctgryname` char(60) NOT NULL,
  PRIMARY KEY  (`unik`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=88 ;

1 个答案:

答案 0 :(得分:1)

不要认为你可以使用当前架构

理想的方法是在文档表中添加另一列并使用uniqueid填充它。 然后更改您的文档链接表以使用它而不是自动包含。

然后你可以根据新标识符插入那些尚未存在的文档,因为它永远不会改变,因为你的自动增量id必须在哪里。

链接表只会在您使用新的不可变密钥时起作用。

因此,基本上文档将有两个唯一标识符,一个是auto inc,另一个是mysql相当于guid。