mysql - 插入...在重复密钥更新时,但不是真的......?

mysql - INSERT... ON DUPLICATE KEY UPDATE, but not really...?

提问人:Ben 提问时间:1/11/2016 更新时间:1/11/2016 访问量:41

问:

嗨,我一直在努力让它工作,我以为我用 mysql 拥有它 - INSERT...ON DUPLICATE KEY UPDATE,但没有运气。

我有一张表格:

sessionID 是唯一的, productID 引用另一个表,并且不唯一,但不常见,最多应包含相同值的 3 行, sessionType 为 1、2 或 3,并将与 productID 链接,

我需要检查表中是否有一行,其中有一对匹配的 productID 和 sessionType,如果有,则该行中的 sessionDate 和 sessionCapacity 应该更新,如果没有,则插入一个新行。

$vals = array($pID,$data['pSessionDate'],'1',$data['pQty'],$pID,$data['pSessionDate'],'1',$data['pQty']);
$db->Execute("INSERT INTO VividStoreSessions (pID,sDate,sType,sCapacity) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE pID=?,sDate=?,sType=?,sCapacity=?",$vals);

希望这对某人有意义,并提前感谢您的任何帮助!

MySQL的

评论

0赞 Narendra Yadav 1/11/2016
dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html 我们在 mysql 5.0 及更高版本中都有这个

答:

2赞 Gordon Linoff 1/11/2016 #1

您的插入看起来有效。但是,首先你需要一个唯一的索引/约束:

create unique index unq_VividStoreSessions_productId_sessionType
    on VividStoreSessions, productId, sessionType)

然后,您可以将代码编写为仅使用四个参数:

INSERT INTO VividStoreSessions (pID, sDate, sType, sCapacity)
     VALUES (? ,?, ?, ?)
    ON DUPLICATE KEY UPDATE sDate = VALUES(sDate), Capacity = VALUES(Capacity);

最后,您需要确保仅采用 1、2 或 3 的值。也许您想在应用程序层强制执行此功能。否则,您需要触发器或外键约束来确保只有三行。sType