国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql中插入記錄時不存在時插入已經存在則更新

2024-07-24 12:38:18
字體:
來源:轉載
供稿:網友

有很多朋友都在問關于mysql中插入記錄時不存在時插入已經存在則更新這個問題怎么操作,下面我來介紹介紹:ON DUPLICATE KEY UPDATE的使用.

如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后會導致在一個UNIQUE索引或PRIMARY KEY中出現重復值,則執行舊行UPDATE,例如,如果列a被定義為UNIQUE,并且包含值1,則以下兩個語句具有相同的效果,代碼如下:

  1. mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)  
  2. -> ON DUPLICATE KEY UPDATE c=c+1;  
  3. mysql> UPDATE table SET c=c+1 WHERE a=1; 

實例1,代碼如下:

  1. mysql> truncate `200702`; 
  2. Query OK, 0 rows affected (0.01 sec) 
  3.  
  4. mysql> select * from `200702`; 
  5. Empty set (0.01 sec) 
  6.  
  7. mysql> insert into `200702` (`domain`, `2nd_domain`, `tld`, `query_ns1`, `query_ns2`, `report_date`) 
  8.  
  9. values ('dnspod.com''dnspod''com', 1000, 2000, '2007-02-04'ON DUPLICATE KEY UPDATE `query_ns1` = 
  10.  
  11. `query_ns1` + 1000, `query_ns2` = `query_ns2` + 2000; 
  12. Query OK, 1 row affected (0.00 sec) 
  13.  
  14. mysql> select * from `200702`; 
  15. +----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
  16. | id | domain | 2nd_domain | tld | query_ns1 | query_ns2 | query_ns3 | query_ns4 | report_date | 
  17. +----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
  18. | 1 | dnspod.com | dnspod | com | 1000 | 2000 | 0 | 0 | 2007-02-04 |  
  19. +----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
  20. 1 row in set (0.00 sec) 
  21.  
  22. mysql> insert into `200702` (`domain`, `2nd_domain`, `tld`, `query_ns1`, `query_ns2`, `report_date`) 
  23.  
  24. values ('dnspod.com''dnspod''com', 1000, 2000, '2007-02-04'ON DUPLICATE KEY UPDATE `query_ns1` = 
  25.  
  26. `query_ns1` + 1000, `query_ns2` = `query_ns2` + 2000; 
  27. Query OK, 2 rows affected (0.01 sec) 
  28.  
  29. mysql> select * from `200702`; 
  30. +----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
  31. | id | domain | 2nd_domain | tld | query_ns1 | query_ns2 | query_ns3 | query_ns4 | report_date | 
  32. +----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
  33. | 1 | dnspod.com | dnspod | com | 2000 | 4000 | 0 | 0 | 2007-02-04 |  
  34. +----+------------+------------+------+-----------+-----------+-----------+-----------+-------------+ 
  35. 1 row in set (0.01 sec) 
  36. --Vevb.com 
  37. mysql> 

當然,建表的時候,千萬別忘記了給domain做一個unique,代碼如下:

UNIQUE KEY `domain` (`domain`,`report_date`)

key存在則更新,不存在則插入,代碼如下:

insert  into  .... on duplicate key update  

對于需要根據原記錄進行操作的.如表中icount字段用于計數,當沒有記錄時,插入的value為0,當有記錄時,value需要更新為value+1,這時replace就不能完成這個功能.使用insert則可以,其基本語法是insert into ... on duplicate

key update...,如上述語句為,代碼如下:

insert into t_test set ikey=1,value='a',value2=1 on duplicate key update value2=value2+1;

如果表中有多個唯一索引,如對value字段加個unique key.這時表中有ikey和value兩個唯一索引,replace會把所有與其唯一索引值相同的數據項刪除,再插入新記錄.如表中有兩個記錄,代碼如下:

  1. +------+-------+--------+ 
  2. | ikey | value | icount | 
  3. +------+-------+--------+ 
  4. |   2 | a    |    10 |  
  5. |   1 | b    |    40 |  
  6. +------+-------+--------+ 

則replace into t_test set ikey=1,value='a',icount=0;會把表中的兩條記錄都刪除,然后插入新記錄.而insert into t_test set ikey=1,value='a',icount=0 on duplicate key update icount=icount+1則只更新一條記錄.其效果相當于如下代碼: 

update t_test set icount=icount+1 where ikey=1 or value='a' limit 1; 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邵武市| 大连市| 昌宁县| 怀仁县| 深泽县| 开平市| 项城市| 仪征市| 砚山县| 北票市| 泌阳县| 海兴县| 江源县| 禄丰县| 昭平县| 嵊州市| 社会| 祁阳县| 鄄城县| 保定市| 浦县| 武乡县| 安宁市| 镶黄旗| 五台县| 阳新县| 南雄市| 石渠县| 定边县| 清水县| 花莲市| 家居| 揭西县| 威远县| 确山县| 易门县| 博白县| 竹山县| 高淳县| 射阳县| 新宾|