尽管有唯一索引,重复的记录仍插入mysql表中

时间:2014-06-29 19:18:08

标签: php mysql sql redbean

我正在使用redbeanPHP ORM和mysql。我有下表:

CREATE TABLE `mast` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `note` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 `geolocation` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 `location` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 `zip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 `state` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 `app` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `UQ_84a93b55f688c94f73092dba1b9590c41a92cbf5` (`app`,`geolocation`)
) ENGINE=InnoDB AUTO_INCREMENT=98 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

我想将记录插入'mast'表中,前提是它们对于上面列出的两个字段都是唯一的。换句话说,如果'geolocation'或'app'是重复的,我不想插入相关的记录。

我使用以下php代码使用rebean插入记录:

      $resultBean= R::dispense('mast');
      $resultBean ->import($resultsarray);

               try {

                 $id = R::store($resultBean); // TRY TO INSERT INTO MAST

               } catch (Exception $exc) {

               } 

插入正在发生,除了我注意到至少插入了'app'字段的重复记录。我得到一个看起来很正常的记录,而副本除了具有重复条目的'app'字段外都有零或空值。

我根本不想要表中的重复条目。如何防止它们被插入?

1 个答案:

答案 0 :(得分:4)

  

如果地理位置不正确的话。或者' app'我是重复的   不想插入相关记录。

UNIQUE KEY `UQ_84a93b55f688c94f73092dba1b9590c41a92cbf5` (`app`,`geolocation`)

仅阻止 appgeolocation被复制。

如果要防止任何一个单独复制,请为每个单独添加索引。

CREATE UNIQUE INDEX UQ_app ON mast (app);
CREATE UNIQUE INDEX UQ_geolocation ON mast (geolocation);