MySQL - 如果尚不存在则插入

时间:2013-01-26 07:45:52

标签: php mysql sql sql-insert

我想执行这个MySQL查询:

INSERT INTO `cron-stats` (`user`) VALUES (".(int)$d['by-user'].")

每当此类用户尚不存在时,如:

SELECT 1
FROM `cron-stats`
WHERE `user` = ".(int)$d['by-user']."

如何在一个查询中执行此操作?

3 个答案:

答案 0 :(得分:19)

您可以使用ON DUPLICATE KEY UPDATE

INSERT INTO `cron-stats` (`user`) VALUES ('yourValue')
ON DUPLICATE KEY UPDATE user = user;

但为了更好地执行INSERT语句,您需要在列UNIQUE上设置user索引。

如果该列还没有index,请执行以下语句

 ALTER TABLE `cron-stats` ADD CONSTRAINT tb_un UNIQUE (`user`)

答案 1 :(得分:5)

有点hacky,但如果你使用SELECT派生表而不是VALUES,你可以这样做:

INSERT INTO `cron-stats`(`user`)
SELECT u
FROM (SELECT @dByUser AS u) x
WHERE NOT EXISTS(SELECT 1 FROM `cron-stats` WHERE `user` = @dByUser)

SQL Fiddle demo

答案 2 :(得分:-2)

您可以使用if else条件尝试此操作

$chk = mysql_query("select 'the username' FROM `cron-stats`");
$rs = mysql_fetch_array($chk);
if($rs == "")
{
    $ins = mysql_query("INSERT INTO `cron-stats` (`user`) VALUES ('.(int)$d['by-user'].')");
} 
else{
    echo "Duplicate entry";
}