提问人:Ben 提问时间:1/11/2016 更新时间:1/11/2016 访问量:41
mysql - 插入...在重复密钥更新时,但不是真的......?
mysql - INSERT... ON DUPLICATE KEY UPDATE, but not really...?
问:
嗨,我一直在努力让它工作,我以为我用 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);
希望这对某人有意义,并提前感谢您的任何帮助!
答:
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
评论