MYSQLでの重複レコードの挿入防止ソリューション


  :      MYSQL     ,        :
insert into table_name(email,phone,user_id) values(‘[email protected]’,’99999′,’9999′) ,
                :        ,      ,   ,.    ,   (        )。
   :REPLACE  
replace      :
1. replace into table_name(col_name, …) values(…)
2. replace into table_name(col_name, …) select …
3. replace into table_name set col_name=value, …
    :
REPLACE    INSERT   ,                ,          ,      , :
1.           
2.                               :
                 
            
                   :    PRIMARY KEY UNIQUE  ,  ,    REPLACE      。
     INSERT  ,                      。
   :
REPLACE        ,           。               。
               REPLACE      ,    REPLACE       :       1(  )   (  )。
  :
eg:(phone       )
replace into table_name(email,phone,user_id) values(‘test569′,’99999′,’123′)
  :  SQL Server        :
if not exists (select phone from t where phone= ‘1’)
insert into t(phone, update_time) values(‘1′, getdate())
else
update t set update_time = getdate() where phone= ‘1’
      :http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#replace
   :ON DUPLICATE KEY UPDATE
    ,     INSERT INTO…..     ON DUPLICATE KEY UPDATE     。
      ON DUPLICATE KEY UPDATE,            UNIQUE   PRIMARY KEY      ,
     UPDATE。  ,   a    UNIQUE,     1,              :
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)
->ON DUPLICATE KEY UPDATE c=c+1;
mysql>UPDATE table SET c=c+1 WHERE a=1;
           ,        1;          ,        2。
  :   b     , INSERT  UPDATE    :
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
  a=1 OR b=2       ,         。  ,                     ON DUPLICATE KEY  。
    UPDATE     VALUES(col_name)   INSERT…UPDATE   INSERT      。
    ,             , UPDATE    VALUES(col_name)        col_name  。            。VALUES()    INSERT…UPDATE      ,       NULL。
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
-> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
              :
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=3;
mysql> INSERT INTO table (a,b,c) VALUES (4,5,6)
-> ON DUPLICATE KEY UPDATE c=9;
    ON DUPLICATE KEY UPDATE ,DELAYED     。
  :
  1:          ,           ,          。
(displayid   )
INSERT INTO
cdqsscms_house_hot_top (displayid,x1,x2,x3,x4,x5,last_updated)
VALUES(2820,1,63,79,54,45,1311053750)
ON DUPLICATE KEY UPDATE
x1=x1+ 1,
x2=x2+ 63,
x3=x3+ 79,
x4=x4+ 54,
x5=x5+ 45,
last_updated= 1311053750
  2(   select ..from…):                ,          (  )。
     :email
INSERT INTO table_name1(title,first_name,last_name,email,phone,user_id,role_id,status,campaign_id)
SELECT ”,”,”,table_name2.email,table_name2.phone,NULL,NULL,’pending’,29
FROM table_name2
WHERE table_name2.status = 1
ON DUPLICATE KEY UPDATE table_name1.status = ‘pending’
       ,      ~
    :DELAYED       ,         ,      。
IGNORE              ,    ,    。
      : http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#insert
    : MYSQL UNIQUE      null    ,    (a         ):
insert into test(a) values(null)
insert into test(a) values(null)
        (         )。  :http://drupal.org/node/225887
     :      » MYSQL              (      )