我刚刚查看了ON DUPLICATE KEY UPDATE
的MySQL。
以下是一个示例查询。
$query = 'INSERT INTO `activities`
(`id`,
`hole_id`,
`name_id`,
`start_depth`,
`end_depth`,
`start_time`,
`end_time`
) VALUES (
:id,
:hole_id,
:name_id,
:start_depth,
:end_depth,
:start_time,
:end_time
) ON DUPLICATE KEY UPDATE
`id` = :id,
`hole_id` = :hole_id,
`name_id` = :name_id,
`start_depth` = :start_depth,
`end_depth` = :end_depth,
`start_time` = :start_time,
`end_time` = :end_time
';
显然有很多重复。
有没有办法说“插入,或者如果存在则使用现有信息进行更新”。
我查看了REPLACE
,并说它会在必要时插入和删除。文档说插入或更新以使用我上面使用的方法。
那么我可以消除所有更新信息的倍增吗?
答案 0 :(得分:3)
您可以使用VALUES()函数来引用列的值,而不是重复ON DUPLICATE KEY部分中的值。请参阅:http://dev.mysql.com/doc/refman/5.1/en/miscellaneous-functions.html#function_values。
例如:
$query = 'INSERT INTO `activities`
(`id`,
`hole_id`,
`name_id`,
`start_depth`,
`end_depth`,
`start_time`,
`end_time`
) VALUES (
:id,
:hole_id,
:name_id,
:start_depth,
:end_depth,
:start_time,
:end_time
) ON DUPLICATE KEY UPDATE
`id` = VALUES(id),
`hole_id` = VALUES(hole_id),
`name_id` = VALUES(name_id),
`start_depth` = VALUES(start_depth),
`end_depth` = VALUES(end_depth),
`start_time` = VALUES(start_time),
`end_time` = VALUES(end_time)
';