在后元数据表中重复键更新时插入失败

时间:2020-07-26 作者:chithra

INSERT ON DUPLICATE KEY UPDATE Mysql查询无法使用POSTETA表。它向表中添加新的/重复的行。我找不到解决这个问题的方法。我需要将其用作批量导入脚本的一部分。

我的问题是:

INSERT INTO \\`wp_postmeta\\` (\\`post_id\\`, \\`meta_key\\`, \\`meta_value\\` ) 
VALUES (21100,"bygg_address","BILGATAN1 9 222B")
ON DUPLICATE KEY UPDATE `meta_value` = "BILGATAN1 92 B";
即使我和21100有一排,“;bygg\\U地址“"E;BILGATAN1 9 222B“;,它插入一个重复的行,而不是更新它。

显示创建表输出:

CREATE TABLE `wp_postmeta` (
  `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `post_id` bigint(20) unsigned NOT NULL DEFAULT \'0\',
  `meta_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `meta_value` longtext COLLATE utf8mb4_unicode_ci,
  PRIMARY KEY (`meta_id`),
  KEY `post_id` (`post_id`),
  KEY `meta_key` (`meta_key`(191)),
  KEY `meta_key_post_id` (`meta_key`(191),`post_id`)
) ENGINE=MyISAM AUTO_INCREMENT=221761 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
任何帮助都将不胜感激。

1 个回复
最合适的回答,由SO网友:mozboz 整理而成

通过执行SHOW CREATE TABLE 在…上wp_postmeta, 我得到了该表的结构,其中包括:

 PRIMARY KEY (`meta_id`),
因此,MySQL可以对其执行“插入或更新”的关键是meta\\u id,您没有提供它。因此,在查询中,它将始终作为新行添加。

编辑:文档INSERT ON DUPLICATE UPDATE 假设它查看主键或任何唯一索引,那么您可以通过在post_idmeta_key 这可能会解决你的问题。

WARNINGS

<如果这是一个大表,那么这可能是个坏主意,因为它可能会减慢一些读写操作

Solution:

测试了这个,它对我有效:

ALTER TABLE wp_postmeta ADD UNIQUE `post_metakey_index` (post_id, meta_key(100));`
使用此索引,如果我对您的问题运行两次查询,它会首先插入它,然后更新它。

相关推荐

ACF Date Based wp_query

我一直在尝试根据使用高级自定义字段创建的end\\u date自定义字段订购这些展览。我无法正常工作。我首先需要最近的约会。我也只需要在exhibition_status 属于past. 对于我的生活,我不能让这个工作,下面的代码只是最新的非工作互动。$args = array ( \'post_type\' => \'exhibitions\', \'meta_query\' => array( \'rel