【问题标题】:Duplicated records being inserted in mysql table despite unique index尽管有唯一索引,但在 mysql 表中插入了重复的记录
【发布时间】:2014-06-29 19:18:08
【问题描述】:

我正在使用 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”字段上的重复记录被插入。我得到了一条看起来很正常的记录,而重复项的值全部为零或空值,但具有重复条目的“应用程序”字段除外。

我根本不希望表格中有重复的条目。如何防止它们被插入?

【问题讨论】:

    标签: php mysql sql redbean


    【解决方案1】:

    如果 'geolocation' 或 'app' 是重复的,我 不想插入关联的记录。

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

    仅防止 pair appgeolocation 被复制。

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

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

    【讨论】:

    • 感谢您的解释。
    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 2012-08-06
    • 2017-08-03
    • 2013-08-10
    相关资源
    最近更新 更多