php - 尽管有唯一索引,但重复的记录被插入到 mysql 表中

标签 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

我想将记录插入到“桅杆”表中,前提是它们对于上面列出的两个字段都是唯一的。换句话说,如果“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”字段。

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

最佳答案

if either 'geolocation' or 'app' is a duplicate, I don't want to insert the associated record.

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

仅防止 appgeolocation 被复制。

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

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

关于php - 尽管有唯一索引,但重复的记录被插入到 mysql 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24479378/

相关文章:

php - 用css设计php输出表

php - CodeIgniter DataMapper ORM v1.8.0 - 如何从多个表中获取记录

mysql - 如何计算mysql中不同项目的项目数?

PHP - 更新字段(如果在数组中)

sql - nvarchar(X) 占用了多少页?

php - 使选择框值淡出/不可点击

php - 连接 HTML 和 PHP 以创建图像链接

mysql - 如何编写查询以获得特价(如果有)

sql - 如果条件通过,如何退出存储过程

sql - 使用 GROUP BY 多列的查询