在mysql表中插入了重复的记录,尽管索引是唯一的


Duplicated records being inserted in mysql table despite unique index

我使用的是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'字段上插入了重复的记录。我得到一个正常的外观记录,而副本具有所有零或空值,除了"应用程序"字段,其中有一个重复的条目。

我根本不想在表中出现重复的条目。我怎样才能防止它们被插入?

如果' geoocation '或'app'是重复的,则I不希望插入关联的记录

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

只阻止 appgeolocation被复制。

如果您想防止其中任何一个单独被复制,请为每个单独添加索引,即

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