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

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql ON DUPLICATE KEY UPDATE語句示例

2020-01-18 23:28:08
字體:
供稿:網(wǎng)友
MySQL 自4.1版以后開始支持INSERT … ON DUPLICATE KEY UPDATE語法,使得原本需要執(zhí)行3條SQL語句(SELECT,INSERT,UPDATE),縮減為1條語句即可完成。
例如ipstats表結(jié)構(gòu)如下:
復(fù)制代碼 代碼如下:

CREATE TABLE ipstats (
ip VARCHAR(15) NOT NULL UNIQUE,
clicks SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0'
);
 

原本需要執(zhí)行3條SQL語句,如下:
復(fù)制代碼 代碼如下:

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

而現(xiàn)在只需下面1條SQL語句即可完成:
復(fù)制代碼 代碼如下:

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

注意,要使用這條語句,前提條件是這個表必須有一個唯一索引或主鍵。
 總結(jié)如下:
1.如果表中不存在主鍵記錄,replace和insert*update都與insert是一樣的特點。
2.如 果表中存在主鍵記錄,replace相當(dāng)于執(zhí)行delete 和 insert兩條操作,而insert*update的相當(dāng)于執(zhí)行if exist do update else do insert操作。因此,如果replace填充的字段不全,則會導(dǎo)致未被更新的字段都會修改為默認(rèn)值,并且如果有自增id的話,自增id會變化為最新的 值(這樣如果是以自增id為標(biāo)志的話可能導(dǎo)致記錄丟失);而insert*update只是更新部分字段,對于未被更新的字段不會變化(不會強制修改為默 認(rèn)值)。
 多條記錄操作:
復(fù)制代碼 代碼如下:

insert into t(a,b,c) values ('a1','b1','c1'),('a2','b2','c2')
on duplicate key update t.c=values(t.c)
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 光山县| 庆城县| 鹰潭市| 定兴县| 丰都县| 上饶市| 壤塘县| 西充县| 古田县| 民勤县| 嘉荫县| 山东省| 福建省| 精河县| 宿松县| 溆浦县| 故城县| 婺源县| 临猗县| 游戏| 陆丰市| 随州市| 通许县| 珠海市| 新河县| 济南市| 临沂市| 安义县| 法库县| 江孜县| 东海县| 汝城县| 河源市| 长兴县| 建水县| 木兰县| 五大连池市| 贺兰县| 苍山县| 阳谷县| 电白县|