如果不存在则插入记录的MySQL条件[重复]

Posted

技术标签:

【中文标题】如果不存在则插入记录的MySQL条件[重复]【英文标题】:MySQL condition for inserting a record if not exists [duplicate] 【发布时间】:2014-02-15 07:24:00 【问题描述】:

我正在努力让大部分工作变得更轻松。这是一个发现数据库中的记录,如果没有,则最终创建它。

这是我的 mysql 命令:

IF NOT EXISTS( SELECT * FROM USERS
               WHERE
                     name = '$this->m_name'
                 AND email = '$this->m_email'
             ) 
  BEGIN
     INSERT INTO `USERS` (`id`, `name`, `email`, `phone`, `text`, `type`)
     VALUES (NULL, '$this->m_name', '$this->m_email', '$this->m_phone', '', '');
  END

由于我不知道的原因,它不起作用。

【问题讨论】:

两个客户不可能有相同的名字吗?我觉得这很不寻常。但我也不想工作。 已从 OR 更正为 AND,但这并没有解决我的问题。我想知道mysql中的注册条件是不是这样 你可以使用“INSERT ... ON DUPLICATE KEY UPDATE”dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html 【参考方案1】:

就我个人而言,我会考虑寻找另一种方法来解决这个问题。

正如有人指出的那样:如果两个人有相同的名字,这是可能的,那么你就会有问题。

但是,如果您在 namephone 值上都有 UNIQUE KEY,则 MySQL 本身将拒绝插入该行,因此您不必这样做。

ALTER TABLE `USERS` ADD UNIQUE (`name`,`phone`);

然后,如果我没有记错的话,重复行的 MySQL 错误号(它应该显示的错误)是 1022。这意味着处理输出的代码应该类似于:

$sql = mysql_query("INSERT INTO `USERS` (`id`, `name`, `email`, `phone`, `text`, `type`)VALUES (NULL, '$this->m_name', '$this->m_email', '$this->m_phone', '', '')");
if (mysql_errno() == 1022)

    echo 'It would appear that you already have an account with us. If you can not access your account, please reset lost password (link here)';

希望对您有所帮助。

【讨论】:

这是关于创建创建预订的客户。因此,每个客户都创建了他们的 ID,即使他们有相同的姓名和电子邮件。所以不是登录记录。这只是一个最终发送消息的用户数据库。我用 php 完成了它,但我发现直接用 SQL 更容易。

以上是关于如果不存在则插入记录的MySQL条件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:如果表中不存在则插入记录[重复]

MySQL INSERT插入条件判断:如果不存在则插入

mysql 条件插入 - 如果不存在插入

如果记录存在则插入和更新,否则不存在竞争条件

MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]

mysql:如果不存在则插入记录,否则返回记录的ID