MySQL INSERT ...或更新说明

时间:2016-05-12 18:24:49

标签: php mysql

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

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

class Welcome extends CI_controller {

    public function __construct()
    {
        $this->load->helper('function1');
    }

    public function index()
    {
        echo function1();
    }
}

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

我从API获得的内容如下:

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的重复项?

在MSSQL中,我只需要执行IF EXISTS ....语句来检查重复项。不幸的是,这是MySQL :(。

1 个答案:

答案 0 :(得分:1)

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

这种方式的工作原理是,在将任何新记录写入表之前,MySQL DB将首先检查是否有任何记录在PRIMARY或UNIQUE键字段中具有值(在您的情况下{{1这是传入记录中相应字段的相同值,如果找到一个,它只会更新该记录而不是写一个新记录。

您可以阅读有关此语法的更多信息here