我知道有很多如何使用它的例子以及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 :(。
答案 0 :(得分:1)
如果您打算使用INSERT ... ON DUPLICATE KEY UPDATE
MySQL语法(这是我从您的问题中理解的,因为INSERT ... OR UPDATE
不是真正的MySQL命令),那么您当前的表结构很好,您不必检查重复记录。
这种方式的工作原理是,在将任何新记录写入表之前,MySQL DB将首先检查是否有任何记录在PRIMARY或UNIQUE键字段中具有值(在您的情况下{{1这是传入记录中相应字段的相同值,如果找到一个,它只会更新该记录而不是写一个新记录。
您可以阅读有关此语法的更多信息here。