我正在尝试将值插入到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>";
} }
答案 0 :(得分:3)
问题在于您将id和phonenumber字段的组合定义为唯一。由于您的id字段被定义为auto_increment,因此它本身就是唯一的,因此与phonenumber字段的任何组合也将是唯一的。
您需要将phonenumber字段单独定义为唯一。之后,您可以使用insert ignore插入包含现有电话号码的新记录,而不会出现raisin错误。但是,请注意,如果匹配,唯一索引将阻止插入整个记录。