[英]Update if row exists, otherwise insert new row into another table
我知道这个问题,但没有帮助。
我有一个包含ID和值的列表。 现在,我必须检查ID是否存在于我的用户数据库中。 如果是这样,那么该行将被更新,否则我必须在另一个表 (tmp_user)中插入ID。
编辑:这是我的尝试
IF NOT EXISTS (SELECT * FROM `wcf1_user` WHERE `steamID` = 1) THEN
INSERT INTO `wcf1_points_tmp` (`steamID`, `points`) VALUES (1, 2)
ELSE
// Update stuff......
END IF;
结果:#1064-您的SQL语法有错误; 在第1行的'IF NOT EXISTS(SELECT * FROM wcf1_user
WHERE steamID
= 1)THEN INSERT IN'附近检查与您的MySQL服务器版本相对应的手册以使用正确的语法
谢谢你的帮助。 :)
如果您指定ON DUPLICATE KEY UPDATE
,并且插入的行将导致UNIQUE
索引或PRIMARY
KEY
值重复,那么将执行旧行的UPDATE
。 例如,如果将列a声明为UNIQUE
并包含值1,则以下两个语句具有相同的作用:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;
这是域逻辑,不属于数据层。 用PHP代替:
<?php
// connect to the database
$DSN = "mysql:dbname=$dbname;charset=utf8";
$opt = array(PDO::MYSQL_ATTR_FOUND_ROWS => true);
$dbh = new PDO($DSN, $username, $password, $opt);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// one assumes you want to perform this operation atomically
$dbh->beginTransaction();
// attempt to update the row
$update = $dbh->prepare('
UPDATE wcf1_user
SET ......
WHERE steamID = ?
');
$update->execute(array($steamID));
// if the update didn't affect any rows
if (!$update->rowCount()) {
// insert into another table instead
$insert = $dbh->prepare('
INSERT INTO wcf1_points_tmp
(steamID, points)
VALUES
(?, ?)
');
$insert->execute(array($steamID, $points));
}
// tada!
$dbh->commit();
?>
我认为您在插入语句的末尾缺少分号,请尝试以下操作,
IF NOT EXISTS (SELECT * FROM `wcf1_user` WHERE `steamID` = 1) THEN
INSERT INTO `wcf1_points_tmp` (`steamID`, `points`) VALUES (1, 2);
ELSE
// Update stuff...... remember to add semicolon at the end
END IF;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.