MySQL插入..或更新说明


MySQL INSERT ... OR UPDATE Explanation

我知道有很多关于如何使用它的例子,以及MySQL文档的链接。不幸的是,我仍然需要澄清它的实际工作原理。

例如,下面的表结构(SQL代码)是我需要使用INSERT。。。或更新:

CREATE TABLE IF NOT EXISTS `occt_category` (
  `category_id` int(11) NOT NULL,
  `image` varchar(255) DEFAULT NULL,
  `parent_id` int(11) NOT NULL DEFAULT '0',
  `top` tinyint(1) NOT NULL,
  `column` int(3) NOT NULL,
  `sort_order` int(3) NOT NULL DEFAULT '0',
  `status` tinyint(1) NOT NULL,
  `date_added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `date_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
ALTER TABLE `occt_category` ADD PRIMARY KEY (`category_id`);
ALTER TABLE `occt_category` MODIFY `category_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;

我试图插入到这个混乱中的是来自API源的新类别,所以肯定有重复。

我从API得到的是:

[
   {
    "categoryID": 81,
    "name": "3/4 Sleeve",
    "url": "3-4sleeve",
    "image": "Images/Categories/81_fm.jpg"
  } 
]

鉴于上述信息;我是否需要更改表结构以检查来自API的重复项?

在MSSQL中,我只是简单地做一个IF EXISTS。。。。语句以检查重复项。不幸的是,这是MySQL:(.

如果你打算使用INSERT ... ON DUPLICATE KEY UPDATE MySQL语法(这是我从你的问题中理解的,因为INSERT ... OR UPDATE不是一个真正的MySQL命令),那么你当前的表结构很好,你不必检查重复的记录。

它的工作方式是,在将任何新记录写入表之前,MySQL DB将首先检查是否有任何记录的PRIMARY或UNIQUE键字段(在您的情况下为category_id)中的值与传入记录中相应字段的值相同,如果它找到了一个,它将简单地更新该记录,而不是写入新记录。

您可以在此处阅读有关此语法的更多信息。