2

现在已经寻找了一段时间来了解如何做到这一点。

似乎所有解决方案都需要具有索引的唯一字段。

4

4 回答 4

9

INSERT中没有IF NOT EXISTS语法,但您可以使用 ON DUPLICATE KEY 机制。假设您在 firstname、lastname 上创建了一个唯一索引,您的更新可能显示为:

INSERT INTO tb (firstname, lastname) 
VALUES ('Jack', 'Doe') 
ON DUPLICATE KEY UPDATE lastname = lastname;

这使得插入中性。

于 2009-12-28T11:59:10.963 回答
0
$sql2="INSERT INTO site_shipping (ship_oid,ship_status)
         SELECT '$orderid', '$status'
         FROM site_shipping 
         WHERE NOT EXISTS 
          (SELECT * 
           FROM site_shipping 
           WHERE ship_oid = '$orderid'
          )
         LIMIT 1
      ";
于 2013-02-07T14:15:47.793 回答
0

您是否已经考虑过INSERT OR UPDATEmysql 的语法,或者您是否希望“取消”最新的插入而不是恢复为更新?

编辑:经过反思后,正如 afftee 所示,of 的确切语法ON DUPLICATE KEY仅由主键或至少唯一列上的重复值触发。

一种可能的解决方案是使用BEFORE INSERT类似于此的触发器:

CREATE TRIGGER block_dup_insert BEFORE INSERT ON my_table
FOR EACH ROW BEGIN
  -- check condition and stop if it would be duplicated according to your logic
END

如果您想停止触发器并阻止实际插入,您似乎可以使用 [mysql doc][1] 上的 Nicolas Lescure 的这篇文章:

“停止操作”的另一种方法是创建一个只有一个主键(reason_to_stop)的表(stop_action)。然后你用一些文本预填充这个表('不要这样做','或者那个')=>停止动作,只需使用任何预填充值('不要那样做')。

[1]:http ://dev.mysql.com/doc/refman/5.1/en/create-trigger.html mysql 创建触发器文档

于 2009-12-28T11:57:26.073 回答
-1

Mysql 插入文档中没有“如果不存在则插入”语法。为了解决这个问题,我预先准备好使用“Insert ... select”语法。在选择部分,您必须使用“不存在”语法添加 where 语句。例如,您可以使用这个:

    insert into tbl (firstname,lastname) select 'Jhon', 'Doe'
from tbl where not exists (select 1 from tbl where firstname = 'Jhon' and lastname = 'Doe') limit 1;
于 2011-11-18T11:38:58.600 回答