MySQL INSERT INTO不存在

Eri*_*c T 0 mysql sql

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

以下是样本表:

id | product_id | ip_address |
------------------------------
a    11112        8.8.8.8
b    11234        9.9.9.9
Run Code Online (Sandbox Code Playgroud)

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

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.'"
))'
Run Code Online (Sandbox Code Playgroud)

Jür*_*ock 9

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

每个都要求您对product_id,ip_address有唯一约束

INSERT IGNORE

INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')
Run Code Online (Sandbox Code Playgroud)

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

更换

REPLACE INTO products VALUES (null, 111, '8.8.8.8')
Run Code Online (Sandbox Code Playgroud)

将执行删除加上新插入.

INSERT ...更新

INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()
Run Code Online (Sandbox Code Playgroud)

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

在你的情况下,我认为你应该没事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);
Run Code Online (Sandbox Code Playgroud)