我知道INSERT INTO SET
和ON DUPLICATE KEY UPDATE
的特定MySQL查询语法如何工作。但是,您可以将它们结合起来吗?并且...可以为$columnSet
和INSERT
部分使用相同的UPDATE
字符串(见下文),在其中保留唯一字段吗?
考虑此示例(我在服务器上将php与pdo一起使用):
// Define the query
$columnSet = "id=:id, date=:date, created=:created, modified=:modified, removed=:removed, synced=1, points=:points, comment=:comment";
$insertQuery = "INSERT INTO point_events SET"
. $columnSet." ON DUPLICATE KEY UPDATE ".$columnSet;
// Define the data
$pointData['id'] = 'someuniqueid not auto incremented';
$pointData['created'] = 1234; // a timestamp
$pointData['modified'] = 1234; // a timestamp
$pointData['removed'] = NULL;
$pointData['points'] = 10;
$pointData['comment'] = "A comment";
$pointData['date'] = time();
// Execute the query. pdoModify is custom function that executes the query.
pdoModify($pdoNew, $insertQuery, $oldData);
我见过的所有帖子都没有结合这两种语法,ON DUPLICATE KEY UPDATE
上的所有帖子似乎都建议您在UPDATE
之后的字符串中不应该包含(重复)键。因此,这是安全的,还是行为不同/有不良副作用。我特别担心的是,将唯一ID保留在$ columnSet中以进行UPDATE。
我相信您的代码应该可以工作。通常,由于最初会检查重复的id
唯一键,因此可以保证在调用ON DUPLICATE KEY
子句后它不会保持不变。