2016-06-28 3 views
0

MYSQL의 테이블에 값을 삽입하려고하면 테이블에 고유 한 열이 있으므로 열에 항상 다른 값이 있습니다.MYSQL 중복 행

나는 coloumn에 대한 UNIQUE 퍼팅 시도했지만 작동하지 않았다가, 또한 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

질문에 대한 답변이 없습니까? http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql – mamosek

답변

3

문제는 당신이 독특한 같은 ID와 PHONENUMBER 필드의 조합을 정의한다는 것입니다. id 필드는 auto_increment로 정의되기 때문에 고유 한 값을 가지므로 phonenumber 필드와의 조합도 고유합니다.

전화 번호 필드 만 지정하면이 고유해야합니다. 그런 다음 삽입 무시를 사용하여 기존 전화 번호가있는 새 레코드를 삽입하여 오류를 건드리지 않아도됩니다. 그러나, 일치하는 경우에는 고유 인덱스가 전체 레코드가 삽입되는 것을 방지합니다.

+0

그림자가 맞습니다 - 복합 고유 인덱스를 정의하고 있습니다. 또한, 합성에서'UNIQUE (phonenumber)'로 변경하려면 파티션이 고유 인덱스로 구성되기 때문에 사용자 정의 된'PARTITION'을 제거해야합니다. – Cam

+0

'id'를 제거하고 시도했습니다. 테이블이 전혀 생성되지 않습니다. 'PARTITIONS'도 제거해야합니까? – Naroju

+0

MySQL에서 제공 한 오류 메시지를 확인하고 이에 대한 조치를 취하십시오. Pls는 당신이 쉽게 그것들과 함께 제공 될 때 우리에게 ** 추측 ** 오류 메시지를 요구하지 않습니다. Pls는 @Cam의 주석도 읽습니다. – Shadow