MySQL上的多个插入/更新


Multiple INSERT/UPDATE on MySQL

我必须使用"重复键"指令执行多次插入/更新,其中一个动态字段,其他动态字段为静态字段。我有带有字段的"通知"表:

ID (BIGINT AUTOINCREMENT PRIMARY KEY), 
user (BIGINT UNIQUE), 
creator (BIGINT UNIQUE), 
type (TINYINT UNIQUE), 
value (BIGINT UNIQUE), 
date (INT), 
readed (TINYINT), 
erased (TINYINT). 

我必须为每个用户插入/更新一行(ID 将由查询提取),因此字段"user"的值将是动态的,其他字段是静态的。如何在 MySQL 上仅使用一个查询执行此操作?

如果可以使用 PDO,则可以构建查询并在添加所有记录后提交查询。

下面是一个将 beginTransaction 与 commit 一起使用的示例。

这将准备查询,然后循环访问用户列表并分配每条记录。

循环后,它提交/操作查询。

$dbc->beginTransaction();
$sql =  'INSERT INTO notifications (id,user,creator,type,value,date,readed,erased) '
    .   'VALUES (:id,:user,:creator,:type,:value,:date,:readed,:erased) '
    .   'ON DUPLICATE KEY UPDATE user=:user ';
$sth= $dbc->prepare( $sql );

foreach( $userlist as $user )
{
    $sth->execute( array(
        ':id'=>$user['id'],
        ':user'=>$user['user'],
        ':creator'=>$user['creator'],
        ':type'=>$user['type'],
        ':value'=>$user['value'],
        ':date'=>$user['date'],
        ':readed'=>$user['readed'],
        ':erased'=>$user['erased']
     ));
}
$dbc->commit();

一些参考点:

  • PDO准备的声明
  • PDO准备
  • PDO提交