欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、前言

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

比如下列偽代碼:

$row = mysql_query($result);

if($row){

mysql_execute('update ...');

}else{

mysql_execute('insert ...');

}

二、insert into … on duplicate key update …

MySql針對此,提供了insert into … on duplicate key update …的語法:

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

注意:這個是MYSQL特有的,不是SQL標準語法;

1、處理邏輯

insert into … on duplicate key update …語句是根據唯一索引判斷記錄是否重復的;

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

如果表同時存在多個唯一索引,只會根據第一個在數據庫中存在相應value的唯一索引做duplicate判斷:

2、示例:

表結構

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表中有一個主鍵id、一個唯一索引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> 存在多個唯一索引時

如果表同時存在多個唯一索引,只會根據第一個在數據庫中存在相應value的唯一索引做duplicate判斷:

1)數據庫中id = 12的記錄不存在,userName="saint22"的記錄存在,所以會根據第二個唯一索引userName做duplicate判斷;

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

2)數據庫中id = 10的記錄存在,userName="saint22"的記錄存在,所以會根據第一個唯一索引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()函數只在INSERT…UPDATE語句中有意義,其它時候會返回NULL;

4、last_insert_id()

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

總結

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

相關文章

  • mysql索引(覆蓋索引,聯合索引,索引下推)

    mysql索引(覆蓋索引,聯合索引,索引下推)

    這篇文章主要介紹了mysql索引(覆蓋索引,聯合索引,索引下推),文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • MYSQL設置字段自動獲取當前時間的sql語句

    MYSQL設置字段自動獲取當前時間的sql語句

    整理數據庫數據,看到好多表都有加create_time和 update_time字段,來記錄數據插入的時間和更新時間,但是時間插入是通過代碼來維護的,這篇文章主要介紹了MYSQL設置字段自動獲取當前時間,需要的朋友可以參考下
    2023-07-07
  • Mysql Data目錄和 Binlog 目錄 搬遷的方法

    Mysql Data目錄和 Binlog 目錄 搬遷的方法

    剛開始安裝時使用了默認目錄,使用一段時間,數據慢慢變在,發(fā)現當前設置的目錄空間不夠時,就要搬遷數據到另一個目錄了
    2011-10-10
  • MySQL IS NULL空值查詢的實現

    MySQL IS NULL空值查詢的實現

    MySQL 提供了?IS NULL?關鍵字,用來判斷字段的值是否為空值,本文主要介紹了MySQL IS NULL空值查詢的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • MySQL使用外鍵實現級聯刪除與更新的方法

    MySQL使用外鍵實現級聯刪除與更新的方法

    這篇文章主要介紹了MySQL使用外鍵實現級聯刪除與更新的方法,詳細分析了mysql數據庫與表的創(chuàng)建、數據插入、查詢以及外鏈的使用與級聯操作相關技巧,需要的朋友可以參考下
    2016-07-07
  • 完美解決mysql啟動后隨即關閉的問題(ibdata1文件損壞導致)

    完美解決mysql啟動后隨即關閉的問題(ibdata1文件損壞導致)

    下面小編就為大家?guī)硪黄昝澜鉀Qmysql啟動后隨即關閉的問題(ibdata1文件損壞導致)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 如何查看MySQL數據文件存放路徑

    如何查看MySQL數據文件存放路徑

    這篇文章主要給大家介紹了關于如何查看MySQL數據文件存放路徑的相關資料,文中通過圖文以及代碼示例介紹的非常詳細,對大家學習或者使用mysql具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 分析一條sql的性能的標準總結

    分析一條sql的性能的標準總結

    在本篇文章里小編給各位分享了關于分析一條sql的性能的相關知識點總結內容,有興趣的朋友們學習下。
    2019-07-07
  • MYSQL大量寫入問題優(yōu)化詳解

    MYSQL大量寫入問題優(yōu)化詳解

    這篇文章主要介紹了MYSQL大量寫入問題優(yōu)化詳解,文中優(yōu)化點解釋的很清楚,讓人看完就明了,感興趣的同學可以閱讀理解下
    2021-03-03
  • mysql 導入導出數據庫以及函數、存儲過程的介紹

    mysql 導入導出數據庫以及函數、存儲過程的介紹

    本篇文章是對mysql中的導入導出數據庫命令以及函數、存儲過程進行了詳細的分析介紹,需要的朋友參考下
    2013-07-07

最新評論