亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mysql特殊語(yǔ)法insert?into?..?on?duplicate?key?update?..使用方法詳析

 更新時(shí)間:2023年04月12日 10:59:38   作者:禿禿愛(ài)健身  
在我們的日常開(kāi)發(fā)中經(jīng)常會(huì)遇到過(guò)這樣的情景,查看某條記錄是否存在,不存在的話(huà)創(chuàng)建一條新記錄,存在的話(huà)更新某些字段,下面這篇文章主要給大家介紹了關(guān)于mysql特殊語(yǔ)法insert?into?..?on?duplicate?key?update?..使用方法的相關(guān)資料,需要的朋友可以參考下

一、前言

在日常開(kāi)發(fā)中,經(jīng)常會(huì)遇到這樣的需求:查看某條記錄是否存在,不存在的話(huà)創(chuàng)建一條新記錄,存在的話(huà)更新某些字段。

比如下列偽代碼:

$row = mysql_query($result);

if($row){

mysql_execute('update ...');

}else{

mysql_execute('insert ...');

}

二、insert into … on duplicate key update …

MySql針對(duì)此,提供了insert into … on duplicate key update …的語(yǔ)法:

  • 在insert的時(shí)候,如果insert的數(shù)據(jù)會(huì)引起唯一索引(包括主鍵索引)的沖突,即唯一值重復(fù)了,則不會(huì)執(zhí)行insert操作,而執(zhí)行后面的update操作。

注意:這個(gè)是MYSQL特有的,不是SQL標(biāo)準(zhǔn)語(yǔ)法;

1、處理邏輯

insert into … on duplicate key update …語(yǔ)句是根據(jù)唯一索引判斷記錄是否重復(fù)的;

  • 如果不存在記錄,插入,則影響的行數(shù)為1;
  • 如果存在記錄,可以更新字段,則影響的行數(shù)為2;
  • 如果存在記錄,并且更新的值和原有的值相同,則影響的行數(shù)為0。

如果表同時(shí)存在多個(gè)唯一索引,只會(huì)根據(jù)第一個(gè)在數(shù)據(jù)庫(kù)中存在相應(yīng)value的唯一索引做duplicate判斷:

2、示例:

表結(jié)構(gòu)

CREATE TABLE `user2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userName` varchar(94) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `gender` int(1) DEFAULT NULL,
  `type` int(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idex_name` (`userName`) USING BTREE,
  KEY `idx_type` (`type`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

user2表中有一個(gè)主鍵id、一個(gè)唯一索引idx_userName;

1> 不存在記錄,插入的情況

insert into user2(userName, age, gender) VALUES("saint33", 99, 1) on DUPLICATE KEY UPDATE age = 88;

2> 存在記錄,可以更新字段的情況

insert into user2(userName, age, gender) VALUES("saint33", 99, 1) on DUPLICATE KEY UPDATE age = 88;

3> 存在記錄,不可以更新字段的情況

insert into user2(userName, age, gender) VALUES("saint33", 99, 1) on DUPLICATE KEY UPDATE age = 88;

4> 存在多個(gè)唯一索引時(shí)

如果表同時(shí)存在多個(gè)唯一索引,只會(huì)根據(jù)第一個(gè)在數(shù)據(jù)庫(kù)中存在相應(yīng)value的唯一索引做duplicate判斷:

1)數(shù)據(jù)庫(kù)中id = 12的記錄不存在,userName="saint22"的記錄存在,所以會(huì)根據(jù)第二個(gè)唯一索引userName做duplicate判斷;

insert into user2(id, userName, age, gender) VALUES(12, "saint22", 99, 1) on DUPLICATE KEY UPDATE age = VALUES(gender) + 80;

2)數(shù)據(jù)庫(kù)中id = 10的記錄存在,userName="saint22"的記錄存在,所以會(huì)根據(jù)第一個(gè)唯一索引id做duplicate判斷;

insert into user2(id, userName, age, gender) VALUES(10, "saint22", 99, 1) on DUPLICATE KEY UPDATE age = VALUES(gender) + 90;

3、Update子句獲取inset部分的值

Update子句可以使用values(col_name)獲取insert部分的值:

insert into user2(userName, age, gender) VALUES("saint22", 99, 1) on DUPLICATE KEY UPDATE age = VALUES(age) + 100;

注意:VALUES()函數(shù)只在INSERT…UPDATE語(yǔ)句中有意義,其它時(shí)候會(huì)返回NULL;

4、last_insert_id()

如果表含有auto_increment字段,使用insert … on duplicate key update插入或更新后,last_insert_id()返回auto_increment字段的值。

總結(jié)

到此這篇關(guān)于mysql特殊語(yǔ)法insert into .. on duplicate key update ..使用方法的文章就介紹到這了,更多相關(guān)insert into .. on duplicate key update內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL中庫(kù)的基本操作指南(推薦!)

    MySQL中庫(kù)的基本操作指南(推薦!)

    MySQL這個(gè)數(shù)據(jù)庫(kù)是一個(gè)客戶(hù)端-服務(wù)器結(jié)構(gòu)的程序,下面這篇文章主要給大家介紹了關(guān)于MySQL中庫(kù)的基本操作指南,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • MySQL通過(guò)自定義函數(shù)實(shí)現(xiàn)遞歸查詢(xún)父級(jí)ID或者子級(jí)ID

    MySQL通過(guò)自定義函數(shù)實(shí)現(xiàn)遞歸查詢(xún)父級(jí)ID或者子級(jí)ID

    這篇文章主要介紹了MySQL通過(guò)自定義函數(shù)實(shí)現(xiàn)遞歸查詢(xún)父級(jí)ID或者子級(jí)ID,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Mysql中時(shí)間戳轉(zhuǎn)為Date的方法示例

    Mysql中時(shí)間戳轉(zhuǎn)為Date的方法示例

    這篇文章主要給大家介紹了關(guān)于Mysql中時(shí)間戳轉(zhuǎn)為Date的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 探討:innodb與myisam在存儲(chǔ)上有何特點(diǎn)和區(qū)別

    探討:innodb與myisam在存儲(chǔ)上有何特點(diǎn)和區(qū)別

    本篇文章是對(duì)innodb與myisam在存儲(chǔ)上有何特點(diǎn)和區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL聯(lián)合索引遵循最左前綴匹配原則

    MySQL聯(lián)合索引遵循最左前綴匹配原則

    這篇文章主要介紹了MySQL聯(lián)合索引遵循最左前綴匹配原則,?MySQL聯(lián)合索引遵循最左前綴匹配原則,即最左優(yōu)先,查詢(xún)的時(shí)候會(huì)優(yōu)先匹配最左邊的索引
    2022-08-08
  • MySQL切分函數(shù)substring()的具體使用

    MySQL切分函數(shù)substring()的具體使用

    這篇文章主要介紹了MySQL切分函數(shù)substring()的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MySQL通配符與正則表達(dá)式搜過(guò)濾數(shù)據(jù)詳解

    MySQL通配符與正則表達(dá)式搜過(guò)濾數(shù)據(jù)詳解

    簡(jiǎn)單來(lái)說(shuō),正則表達(dá)式就是用來(lái)匹配文本的特殊字符串,下面這篇文章主要給大家介紹了關(guān)于MySQL通配符與正則表達(dá)式搜過(guò)濾數(shù)據(jù)的相關(guān)資料,文中通過(guò)實(shí)例代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • mysql和sqlserver查詢(xún)數(shù)據(jù)庫(kù)表的數(shù)量方法詳解

    mysql和sqlserver查詢(xún)數(shù)據(jù)庫(kù)表的數(shù)量方法詳解

    這篇文章主要介紹了mysql和sqlserver查詢(xún)數(shù)據(jù)庫(kù)表的數(shù)量方法詳解,本文給大家分享SQL語(yǔ)句寫(xiě)法,文末補(bǔ)充介紹了查詢(xún)sqlserver 數(shù)據(jù)庫(kù)中各表?xiàng)l數(shù)的語(yǔ)句,需要的朋友可以參考下
    2023-07-07
  • MySQL的join buffer原理

    MySQL的join buffer原理

    這篇文章主要介紹了MySQL的join buffer原理,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-04-04
  • Win10 64位使用壓縮包安裝最新MySQL8.0.18的教程(圖文詳解)

    Win10 64位使用壓縮包安裝最新MySQL8.0.18的教程(圖文詳解)

    本文通過(guò)圖文并茂的形式給大家介紹了WIN10 64位使用壓縮包安裝最新MySQL8.0.18的教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論