MYSQL重复行

时间:2016-06-28 11:38:58

标签: php mysql

我正在尝试将值插入到MYSQL中的表中,该表有一列应该是唯一的,因此该列始终具有不同的值。

我尝试将UNIQUE用于coloumn,但它没有用, 还尝试将该列设置为PRIMARY KEY并插入IGNORE INTO命令它不起作用(http://www.tutorialspoint.com/mysql/mysql-handling-duplicates.htm

我的目的是将phonenumber列设置为唯一,以便此列中的每个值都不同。如果新插入的值不是唯一的,它应该跳过而不会给出错误。

创建表的代码:

  public function create_member_table($table)
 {
$this->sql ="CREATE TABLE IF NOT EXISTS $table ( id BIGINT NOT NULL AUTO_INCREMENT,
                                    username VARCHAR(50) NOT NULL,
                                    phonenumber VARCHAR(20) NOT NULL,
                                    country VARCHAR(2) NOT NULL,
                                    profession VARCHAR(5000) NOT NULL,
                                    profilepic VARCHAR(5000) NOT NULL,
                                    smskey VARCHAR(100) NOT NULL,
                                    status INT NOT NULL,
                                    reg_date_time DATETIME NOT NULL,
                                    UNIQUE (id,phonenumber))
                                    PARTITION BY HASH(id)
                                    PARTITIONS 1023;";
$this->tb = mysqli_query($this->ret,$this->sql);
if(!$this->tb){
  echo "Table not created<br>";

}
else{
  echo "Table created<br>";

}

插入表格:

  public function table_member_insert($table,$phonenumber="",$username="",$country="",$profession="",$profilepic="0",$smskey="",$status="") {

   $this->sql = "INSERT INTO $table
                  (username,phonenumber,country,profession,profilepic,smskey,status,reg_date_time)
                  VALUES
                  ('$username','$phonenumber','$country','$profession','$profilepic','$smskey','$status',now());";

                  $this->tb = mysqli_query($this->ret,$this->sql);
                  if(!$this->tb){
                    echo "values not inserted<br>";

                  }
                  else{
                    echo "values inserted<br>";
                  } }

1 个答案:

答案 0 :(得分:3)

问题在于您将id和phonenumber字段的组合定义为唯一。由于您的id字段被定义为auto_increment,因此它本身就是唯一的,因此与phonenumber字段的任何组合也将是唯一的。

您需要将phonenumber字段单独定义为唯一。之后,您可以使用insert ignore插入包含现有电话号码的新记录,而不会出现raisin错误。但是,请注意,如果匹配,唯一索引将阻止插入整个记录。