最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中的insert-on-duplicate語句舉例詳解

 更新時間:2024年06月08日 10:28:13   作者:Charge8  
這篇文章主要給大家介紹了關(guān)于MySQL中insert-on-duplicate語句的相關(guān)資料,文中通過圖文以及代碼示例將insert-on-duplicate的用法介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、insert-on-duplicate語句語法

注意:ON DUPLICATE KEY UPDATE只是 MySQL的特有語法,并不是SQL標(biāo)準(zhǔn)語法!

INSERT INTO … ON DUPLICATE KEY UPDATE 是 MySQL 中一種用于插入數(shù)據(jù)并處理重復(fù)鍵沖突的語法。

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

基本語法為:

INSERT INTO table_name (column1, column2, ...) 
VALUES (value1, value2, ...) 
ON DUPLICATE KEY UPDATE column1 = value1, column2 = value2, ...;

-- 一般 Update子句可以使用 VALUES(col_name)獲取 insert部分的值
INSERT INTO table_name (column1, column2, ...) 
VALUES (value1, value2, ...) 
ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2), ...;

說明:

  • table_name 是要插入數(shù)據(jù)的表名。
  • (column1, column2, …) 是要插入的列名列表。
  • (value1, value2, …) 是要插入的對應(yīng)列的值列表。
  • ON DUPLICATE KEY UPDATE 子句后面指定了在沖突時需要執(zhí)行的更新操作。
  • column1 = value1, column2 = value2, … 是要更新的列和對應(yīng)的新值。
  • column1 = VALUES(column1), column2 = VALUES(column2), … 是要更新的列和對應(yīng)的新值(insert部分的值)。

insert-on-duplicate語句處理邏輯:

語句是根據(jù)唯一索引判斷記錄是否重復(fù)的。當(dāng)執(zhí)行插入操作時,如果唯一鍵不沖突(表中不存在記錄),則執(zhí)行插入操作;如果遇到唯一鍵沖突(表中存在記錄),則會執(zhí)行更新操作,使用給定的新值來更新沖突行中的列。

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

注意:如果表同時存在多個唯一索引,只會根據(jù)第一個在數(shù)據(jù)庫中存在相應(yīng)value的列唯一索引做duplicate判斷。

二、示例表操作使用

t_user表結(jié)構(gòu):表中有一個主鍵id、一個唯一索引idx_name;

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
  `user_name` varchar(30) NOT NULL  COMMENT '用戶名',
  `age` int NOT NULL DEFAULT '0' COMMENT '年齡',
  `height` int DEFAULT '0' COMMENT '身高cm',
  `type` int(1) DEFAULT NULL COMMENT '類型',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_name` (`user_name`) USING BTREE,
  KEY `idx_type` (`type`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8  COMMENT='用戶表';

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

INSERT into t_user(user_name, age, height) VALUES("lisi", 17, 180) on DUPLICATE KEY UPDATE age = 18;

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

INSERT into t_user(user_name, age, height) VALUES("lisi", 17, 180) on DUPLICATE KEY UPDATE age = 18;

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

INSERT into t_user(user_name, age, height, type) VALUES("lisi", 18, 180, 1) on DUPLICATE KEY UPDATE age = 18;

4、存在多個唯一索引時

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

1)數(shù)據(jù)庫中id = 2的記錄不存在,user_name="lisi"的記錄存在,所以會根據(jù)第二個唯一索引 user_name做duplicate判斷:執(zhí)行 update操作。

INSERT into t_user(id, user_name, age, height, type) VALUES(2, "lisi", 27, 280, 0) on DUPLICATE KEY UPDATE age = 28;

2)數(shù)據(jù)庫中id = 2的記錄不存在,user_name="lisisi"的記錄不存在,所以不存在重復(fù)鍵沖突:執(zhí)行 insert操作。

INSERT into t_user(id, user_name, age, height, type) VALUES(2, "lisisi", 27, 280, 0) on DUPLICATE KEY UPDATE age = 28;

3)數(shù)據(jù)庫中 id = 2的記錄存在,user_name="lisisi"的記錄存在,所以會根據(jù)第一個唯一索引id做duplicate判斷:執(zhí)行 update操作。

INSERT into t_user(id, user_name, age, height, type) VALUES(2, "lisisi", 37, 380, 1) on DUPLICATE KEY UPDATE age = 38;

4)數(shù)據(jù)庫中 id = 2的記錄存在,user_name="lisisi2"的記錄不存在,所以會根據(jù)第一個唯一索引id做duplicate判斷:執(zhí)行 update操作。

INSERT into t_user(id, user_name, age, height, type) VALUES(2, "lisisi2", 47, 480, 0) on DUPLICATE KEY UPDATE age = 48;

5、VALUES(col_name)使用

一般 Update子句可以使用 VALUES(col_name)獲取 insert部分的值。也是項目中使用最多的方式。

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

INSERT into t_user(id, user_name, age, height, type) VALUES(2, "lisisi", 57, 480, 0) on DUPLICATE KEY UPDATE age = VALUES(age) + 100;

6、批量操作

批量操作之前表中數(shù)據(jù)如下:

批量語句如下:

INSERT INTO t_user(user_name, age, height, type) 
VALUES
("lisi", 71, 701, 0),
("lisisi", 72, 280, 1),
("zhangsan", 73, 703, 0),
("wangwu", 74, 704, null),
("laoliu", 75, null, null)
ON DUPLICATE KEY UPDATE 
user_name = VALUES(user_name),
age = VALUES(age),
height = VALUES(height),
type = VALUES(type);

批量語句執(zhí)行操作之后表中數(shù)據(jù)如下:

參考文章:

總結(jié)

到此這篇關(guān)于MySQL中insert-on-duplicate語句的文章就介紹到這了,更多相關(guān)MySQL的insert-on-duplicate語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL刪除外鍵、增加外鍵以及刪除主鍵、增加主鍵的實戰(zhàn)步驟

    MySQL刪除外鍵、增加外鍵以及刪除主鍵、增加主鍵的實戰(zhàn)步驟

    在Mysql中使用外鍵,可以有效地將多個表格的數(shù)據(jù)"聯(lián)動"起來,打破獨立狀態(tài),互相影響,下面這篇文章主要給大家介紹了關(guān)于MySQL刪除外鍵、增加外鍵以及刪除主鍵、增加主鍵的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • mysql獲得60天前unix時間的方法

    mysql獲得60天前unix時間的方法

    首先根據(jù)now()獲得當(dāng)前時間,使用adddate()方法獲得60天前時間,使用unix_timestamp()方法轉(zhuǎn)換時間類型,需要的朋友可以參考下
    2014-09-09
  • MySQL請求處理全流程之如何從SQL語句到數(shù)據(jù)返回

    MySQL請求處理全流程之如何從SQL語句到數(shù)據(jù)返回

    這篇文章主要介紹了MySQL請求處理全流程之如何從SQL語句到數(shù)據(jù)返回,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-03-03
  • MySQL?8.0.31中使用MySQL?Workbench提示配置文件錯誤信息解決方案

    MySQL?8.0.31中使用MySQL?Workbench提示配置文件錯誤信息解決方案

    這篇文章主要介紹了MySQL?8.0.31中使用MySQL?Workbench提示配置文件錯誤信息,本文給大家分享完美解決方案,文中補充介紹了MySQL?Workbench部分出錯及可能解決方案,需要的朋友可以參考下
    2023-01-01
  • 解決Navicat導(dǎo)入數(shù)據(jù)庫數(shù)據(jù)結(jié)構(gòu)sql報錯datetime(0)的問題

    解決Navicat導(dǎo)入數(shù)據(jù)庫數(shù)據(jù)結(jié)構(gòu)sql報錯datetime(0)的問題

    這篇文章主要介紹了解決Navicat導(dǎo)入數(shù)據(jù)庫數(shù)據(jù)結(jié)構(gòu)sql報錯datetime(0)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 關(guān)于MySql的kill命令詳解

    關(guān)于MySql的kill命令詳解

    這篇文章主要介紹了關(guān)于MySql的kill命令詳解,不知道你在使用 MySQL 的時候,有沒有遇到過這樣的現(xiàn)象:使用了 kill 命令,卻沒能斷開這個連接,今天我們就來講一講這個問題,需要的朋友可以參考下
    2023-05-05
  • MySQL NULL 值處理實例詳解

    MySQL NULL 值處理實例詳解

    這篇文章主要介紹了MySQL NULL 值處理實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • MySQL限制查詢和數(shù)據(jù)排序介紹

    MySQL限制查詢和數(shù)據(jù)排序介紹

    這篇文章主要介紹了MySQL限制查詢和數(shù)據(jù)排序介紹,通過limit可以限制返回結(jié)果的行數(shù),而當(dāng)數(shù)據(jù)查詢出來以后,我們可以對數(shù)據(jù)進(jìn)行排序處理。在末尾使用order?by語句,下文相關(guān)詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-03-03
  • MySQL回表產(chǎn)生的原因和場景

    MySQL回表產(chǎn)生的原因和場景

    在MySQL數(shù)據(jù)庫中,回表(Look Up)指的是在進(jìn)行索引查詢時,首先通過索引定位到對應(yīng)頁,然后再根據(jù)行的物理地址找到所需的數(shù)據(jù)行,本文給大家介紹了MySQL回表是什么以及哪些情況下會回表,需要的朋友可以參考下
    2023-11-11
  • 簡介操作MySQL日志的一些方法

    簡介操作MySQL日志的一些方法

    這篇文章主要介紹了操作MySQL日志的一些方法,對日志的刪除操作做了重點講解,需要的朋友可以參考下
    2015-07-07

最新評論

浦江县| 苍山县| 香港 | 新干县| 行唐县| 丹东市| 甘泉县| 广宗县| 乌兰浩特市| 江油市| 聂荣县| 建宁县| 广安市| 峨眉山市| 莫力| 阜城县| 平泉县| 沅江市| 旺苍县| 昌乐县| 乌海市| 庆阳市| 宣恩县| 桂平市| 上饶县| 淳安县| 兴山县| 卢龙县| 扎兰屯市| 大竹县| 雅江县| 革吉县| 辉南县| 东台市| 垫江县| 宁都县| 通州区| 香格里拉县| 郓城县| 商河县| 龙川县|