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

首頁 > 數據庫 > MySQL > 正文

mysql中INSERT INTO… ON DUPLICATE KEY UPDATE用法

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

MySQL 自4.1版以后開始支持INSERT … ON DUPLICATE KEY UPDATE語法,使得原本需要執行3條SQL語句,SELECT,INSERT,UPDATE,縮減為1條語句即可完成.

例如ipstats表結構如下:

  1. CREATE TABLE ipstats ( 
  2. ip VARCHAR(15) NOT NULL UNIQUE
  3. clicks SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' 
  4. ); //Vevb.com

原本需要執行3條SQL語句,代碼如下:

  1. IF (SELECT * FROM ipstats WHERE ip='192.168.0.1') { 
  2.     UPDATE ipstats SET clicks=clicks+1 WHERE ip='192.168.0.1'
  3. else { 
  4.     INSERT INTO ipstats (ip, clicks) VALUES ('192.168.0.1', 1); 

而現在只需下面1條SQL語句即可完成,代碼如下:

INSERT INTO ipstats VALUES('192.168.0.1', 1) ON DUPLICATE KEY UPDATE clicks=clicks+1;

注意,要使用這條語句,前提條件是這個表必須有一個唯一索引或主鍵.

總結如下:

1.如果表中不存在主鍵記錄,replace和insert*update都與insert是一樣的特點.

2.如 果表中存在主鍵記錄,replace相當于執行delete 和 insert兩條操作,而insert*update的相當于執行if exist do update else do insert操作,因此,如果replace填充的字段不全,則會導致未被更新的字段都會修改為默認值,并且如果有自增id的話,自增id會變化為最新的值,這樣如果是以自增id為標志的話可能導致記錄丟失,而insert*update只是更新部分字段,對于未被更新的字段不會變化,不會強制修改為默 認值.

多條記錄操作,代碼如下:

insert into t(a,b,c) values ('a1','b1','c1'),('a2','b2','c2') on duplicate key update t.c=values(t.c)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴义市| 陇川县| 岑溪市| 舞阳县| 苍山县| 广东省| 新津县| 砚山县| 元阳县| 永靖县| 浦东新区| 灵寿县| 巧家县| 永兴县| 临猗县| 蕉岭县| 望奎县| 迁西县| 襄汾县| 商河县| 遂平县| 阿尔山市| 吉林省| 洮南市| 汤原县| 苍溪县| 霍邱县| 双辽市| 鲁甸县| 沙田区| 新建县| 鄂州市| 镇宁| 刚察县| 井陉县| 昭通市| 溧水县| 城口县| 汾阳市| 南昌市| 仁化县|