让我把我的想法放在这里。我不知道我是否完全理解这个问题。
重复密钥更新
INSERT INTO table (ID, Col1, Col2)
VALUES (100, value1, value2)
ON DUPLICATE KEY UPDATE ID = 100; -- or whatever you need
INSERT INTO table (ID, Col1, Col2)
VALUES (100, value1, value2)
ON DUPLICATE KEY UPDATE ID = ID; -- this keeps the ID to what ever it was, no change.
不存在
INSERT INTO funds (ID, Col1, Col2)
SELECT 100, "value1", "value2"
FROM dual
WHERE NOT EXISTS (SELECT 1
FROM table
WHERE ID = 100
);
“在没有引用表的情况下,您可以指定DUAL
为虚拟表名:
额外的想法。
更换成
这INSERT
与一个重要的例外完全一样。如果duplicate row
找到 a ,它首先将其删除,然后执行INSERT
,因此我们不会收到错误消息。
<?php
mysql_query(" REPLACE INTO table SET col1='data1', col2='data2' ");
插入忽略
这是一种抑制 的方法duplicate errors
,通常是为了防止应用程序崩溃。有时您可能想尝试插入一个新行,然后让它失败而没有任何抱怨,以防万一发现重复。
<?php
mysql_query(" INSERT IGNORE INTO table SET col1='data1', col2='data2' ");