MySQL INSERT INTO不存在

时间:2013-06-20 06:39:02

标签: mysql sql

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

下面是示例表:

id | product_id | ip_address |
------------------------------
a    11112        8.8.8.8
b    11234        9.9.9.9

我的代码是这样的,但它不起作用。

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.'"
))'

1 个答案:

答案 0 :(得分:9)

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

每个都要求您对product_id,ip_address

有唯一约束

INSERT IGNORE

INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')
如果条目已存在,

将忽略插入。

<强>更换

REPLACE INTO products VALUES (null, 111, '8.8.8.8')

将执行删除和新插入。

INSERT ... UPDATE

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的唯一索引。 你可以用

来实现这个目标
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);