MySQL没有更新重复键

时间:2012-04-15 13:08:39

标签: mysql indexing duplicates unique

嗨,我在查询时遇到问题:

$size = isset($_POST['size'])
  ? "'".mysql_real_escape_string($_POST['size'])."'"
  : "NULL";

$color = isset($_POST['color'])
  ? "'".mysql_real_escape_string($_POST['color'])."'"
  : "NULL";

if (is_numeric($_POST['productID']) && is_numeric($_POST['amount']))
{           
  mysql_query("INSERT INTO usercart VALUES ('', '"
  .mysql_real_escape_string($_SESSION['user_ID'])."', '"
  .mysql_real_escape_string($_POST['productID'])."', "
  .$size." , ".$color." , '".mysql_real_escape_string($_POST['amount'])."')"
  ." ON DUPLICATE KEY UPDATE amount = amount + '"
  .mysql_real_escape_string($_POST['amount'])."'") or die(mysql_error());
}

在我的MySQL表中,我在"product"productIDuserIDsize上有一个名为color的唯一索引。但是,当我运行此查询时,它只是插入而不是更新金额。阅读MySQL文档我可以而且不必指定索引名称。

现在正在摆弄这几个小时。所以谁知道什么事了?

2 个答案:

答案 0 :(得分:0)

看来你有一个代理键“cart_id”,它也是第一个字段的自动增量。您的片段可能会导致DBMS尝试将user_id输入第一个字段,即cart_id。 尝试使用指定的插入,省略cart_id,如:

INSERT INTO usercart(user_id, product_id, ... )
VALUES (user_id, product_id, ...)
   ;

答案 1 :(得分:0)

NULL始终被视为唯一。因此,如果您将颜色或大小设置为null,那么就您的唯一约束而言,您插入的元组将被视为唯一。