【问题标题】:how to prevent duplicate data in sql如何防止sql中的重复数据
【发布时间】:2013-12-26 23:38:40
【问题描述】:

我开发了一个将数据发送到 sql 数据库的电子邮件表单。但是,我注意到可能存在重复的电子邮件。有什么我可以添加到我的 php 或 sql 来防止重复电子邮件的吗?

<?php

if (isset($_POST['submit']) && strlen($_POST['email'])>0 && strlen($_POST['city'])>0)
{
    $good_input = true;
    $email=$_POST['email']; 
    $city=$_POST['city'];  
    mysql_connect("host", "username", "password") or die(mysql_error()); 
    mysql_select_db("database") or die(mysql_error());
    mysql_query("INSERT INTO `launchpage` VALUES ('$email', '$city')"); 

}


?> 

【问题讨论】:

  • email 上添加unique index
  • 你应该考虑使用 mysqli 或 PDO,因为 mysql 已被弃用。

标签: php sql forms


【解决方案1】:

您可以将电子邮件设为表格的主键:

ALTER TABLE launchpage ADD PRIMARY KEY(email);

然后用REPLACE INTO代替INSERT INTO

mysql_query("REPLACE INTO `launchpage` VALUES ('$email', '$city')"); 

如果键存在,则 REPLACE 更新现有记录,否则插入新记录。好处是 SQL 查询不会像您尝试在 UNIQUE 索引上插入时那样失败。

在制作主键电子邮件之前,您需要删除重复项。看到这个帖子:Delete Duplicate email addresses from Table in MYSQL

【讨论】:

  • 刚开始为表创建主键,但我会添加这样的东西吗? ALTER TABLE 启动页添加主键('$email')
  • 见我上面的例子。您只需添加一次 PK。
【解决方案2】:

你可以试试:

ALTER TABLE launchpage ADD UNIQUE (email);

【讨论】:

    【解决方案3】:

    是的,将UNIQUE 约束添加到表中的电子邮件列。

    ALTER TABLE launchpage
    ADD CONSTRAINT UNIQUE INDEX unique_email (email)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 2020-08-12
      • 2013-08-22
      相关资源
      最近更新 更多