首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL插入到不存在的地方

MySQL插入到不存在的地方
EN

Stack Overflow用户
提问于 2013-06-20 14:39:02
回答 2查看 11.9K关注 0票数 0

如果product_id的ip_address不存在,我想插入到同一个表中,但最好不要创建两个单独的查询。我怎样才能做到这一点?

下面是示例表:

代码语言:javascript
复制
id | product_id | ip_address |
------------------------------
a    11112        8.8.8.8
b    11234        9.9.9.9

我的代码是这样的,但它不能工作。

代码语言:javascript
复制
INSERT INTO `'._DB_PREFIX_.'views` 
(SELECT '.$id_product.',"'.$ip_addr.'"
FROM `'._DB_PREFIX_.'views` 
WHERE NOT EXISTS (SELECT * FROM
`'._DB_PREFIX_.'views` v WHERE v.id_product ='.$id_product.' AND
t.ip_address ="'.$ip_addr.'"
))'
EN

Stack Overflow用户

回答已采纳

发布于 2013-06-20 14:40:56

您可以使用INSERT IGNOREREPLACEINSERT ... ON DUPLICATE KEY UPDATE ...

每种方法都要求您对product_id、ip_address有一个唯一的约束

插入忽略

代码语言:javascript
复制
INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')

如果条目已经存在,将忽略插入。

替换

代码语言:javascript
复制
REPLACE INTO products VALUES (null, 111, '8.8.8.8')

将执行delete加上新插入。

插入...更新

代码语言:javascript
复制
INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()

将尝试插入,如果插入失败,则更新现有记录。

在您的情况下,我认为您应该可以使用INSERT IGNORE,但是,如果您希望在记录已经存在的情况下更改其他值,INSERT ... UPDATE ...应该可以很好地工作。

我通常不推荐使用REPLACE,除非您真的想要DELETE FROM table WHERE ...加上INSERT INTO TABLE ...

更新

这需要(在本例中)组合产品ip_address的唯一索引。您可以使用以下命令来实现此目的

代码语言:javascript
复制
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);
票数 14
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17206842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档