如果不存在则插入记录的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】:就我个人而言,我会考虑寻找另一种方法来解决这个问题。
正如有人指出的那样:如果两个人有相同的名字,这是可能的,那么你就会有问题。
但是,如果您在 name
和 phone
值上都有 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条件[重复]的主要内容,如果未能解决你的问题,请参考以下文章