1

我想通过一个代码使用NOT EXISTSlast_insert_id()来执行以下操作。下面的代码满足了我的需求, Col1 是一个唯一键,如果它已经存在,代码将不会插入数据。如果插入新行或已存在新行,则代码总是返回相关行的 $id

<?php 
mysql_query(" INSERT table SET col1='data1', col2='data2' ");

$result = mysql_query("SELECT id FROM table WHERE col1='data1' ") ;
while($row = mysql_fetch_array( $result )) { $id=$row['id'];}

header("Location:page.php?id=$id"); 
?>
4

1 回答 1

0

让我把我的想法放在这里。我不知道我是否完全理解这个问题。

重复密钥更新

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' ");
于 2013-11-24T14:33:33.620 回答