【问题标题】:Mysql INSERT IGNORE INTO ignore only one columnMysql INSERT IGNORE INTO 只忽略一列
【发布时间】:2017-11-12 06:13:39
【问题描述】:

我在我的网站上使用了以下 sql

$sql = "INSERT IGNORE INTO names VALUES ('akku@gmail.com','19','akku');";

此代码仅在三个值相同时才有效。 .只有当数据库中不存在第一个值(akku@gmail.com)时,我才需要将数据插入数据库。否则它应该显示“电子邮件已经存在”。即使第二个和第三个值不同,它也应该可以工作。

【问题讨论】:

    标签: php mysql insert insert-into


    【解决方案1】:

    将电子邮件地址设为表格的主键。不要在语句中使用 IGNORE 关键字。捕获输入重复电子邮件时出现的错误(尝试将重复插入 MySQL 将导致前端代码出现异常)并显示“电子邮件已存在”消息

    数据库不关心你的值是什么所以我真的不明白你的意思是“它只有在最后两个相同时才有效”除非你有一个触发器,如果​​你尝试插入会引发错误最后两列的值不同

    【讨论】:

      【解决方案2】:

      您可以先使用SELECT 查找数据是否存在,如果不存在则插入,如果存在则更新。这将是最好的方法,因为您可以使用 php 来处理使用它的任何情况。

      第二种方法是创建第一个值主键。这样你的插入会抛出一个错误,你可以抓住它来做任何你想做的事情。

      第三种方式,如果您想更新数据(如果存在),将使用-INSERT ON DUPLICATE KEY UPDATEhttps://mariadb.com/kb/en/library/insert-on-duplicate-key-update/

      【讨论】:

      • 我真的不会费心先选择:这就是发明独特约束的原因
      • 是的。尽管如此,这对代码的可读性还是有好处的,如果用例变得复杂并具有多个约束,则可以在以后进行扩展。