国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL的insert-on-duplicate語句詳解

這篇具有很好參考價值的文章主要介紹了MySQL的insert-on-duplicate語句詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、insert-on-duplicate語句語法

注意:ON DUPLICATE KEY UPDATE只是 MySQL的特有語法,并不是SQL標準語法!

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;

insert into on duplicate,# MySQL,mysql,insert語句

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

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

insert into on duplicate,# MySQL,mysql,insert語句

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

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

insert into on duplicate,# MySQL,mysql,insert語句

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;

insert into on duplicate,# MySQL,mysql,insert語句

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;

insert into on duplicate,# MySQL,mysql,insert語句

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;

insert into on duplicate,# MySQL,mysql,insert語句

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;

insert into on duplicate,# MySQL,mysql,insert語句

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;

insert into on duplicate,# MySQL,mysql,insert語句

6、批量操作

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

insert into on duplicate,# MySQL,mysql,insert語句

批量語句如下:

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ù)如下:

insert into on duplicate,# MySQL,mysql,insert語句

參考文章:

  • 官方文檔:https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

– 求知若饑,虛心若愚。文章來源地址http://www.zghlxwxcb.cn/news/detail-849822.html

到了這里,關(guān)于MySQL的insert-on-duplicate語句詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MybatisPlus 使用 saveOrUpdate 詳解(慎用),及問題解決方法&mysql保存或更新 ON DUPLICATE KEY UPDATE

    MybatisPlus 使用 saveOrUpdate 詳解(慎用),及問題解決方法&mysql保存或更新 ON DUPLICATE KEY UPDATE

    今天的想法是,要在插入數(shù)據(jù)庫時,如果有某某一個主要字段的值重復(fù),則不插入,否則則插入! 看了一下mybatis-Plus是有這個saveOrUpdate 方法! 原本使用save時是沒有問題了,改成saveOrUpdate 用了一下就報錯了。 com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: error: can not execut

    2024年02月11日
    瀏覽(42)
  • MySQL修煉手冊7:數(shù)據(jù)修改基礎(chǔ):INSERT、UPDATE、DELETE語句詳解

    在掌握了MySQL數(shù)據(jù)庫的基礎(chǔ)之后,學(xué)習(xí)如何對數(shù)據(jù)進行有效的修改是至關(guān)重要的。本篇博客旨在提供一個深入的指南,涵蓋了數(shù)據(jù)修改的三大基礎(chǔ)操作:插入(INSERT)、更新(UPDATE)、刪除(DELETE)。為了更好地理解這些概念,我們首先創(chuàng)建一個示例表“水果表”,然后逐一

    2024年01月17日
    瀏覽(27)
  • Apache Doris 數(shù)據(jù)導(dǎo)入:Insert Into語句;Binlog Load;Broker Load;HDFS Load;Spark Load;例行導(dǎo)入(Routine Load)

    Apache Doris 數(shù)據(jù)導(dǎo)入:Insert Into語句;Binlog Load;Broker Load;HDFS Load;Spark Load;例行導(dǎo)入(Routine Load)

    Doris 提供多種數(shù)據(jù)導(dǎo)入方案,可以針對不同的數(shù)據(jù)源進行選擇不同的數(shù)據(jù)導(dǎo)入方式。Doris支持各種各樣的數(shù)據(jù)導(dǎo)入方式:Insert Into、json格式數(shù)據(jù)導(dǎo)入、Binlog Load、Broker Load、Routine Load、Spark Load、Stream Load、S3 Load,下面分別進行介紹。 注意: Doris 中的所有導(dǎo)入操作都有原子性保

    2024年02月21日
    瀏覽(19)
  • mysql批量插入insert語句

    在MySQL中批量插入數(shù)據(jù)有幾種方法,下面我將介紹其中兩種常用的方法: 這是一種簡單的方式,可以一次性插入多個值。以下是一個示例: 在上面的示例中,你需要替換your_table_name為你的表名,列名和相應(yīng)的值。你可以一次性插入多行數(shù)據(jù)。 另一種批量插入數(shù)據(jù)的方法是使

    2024年02月06日
    瀏覽(37)
  • 記錄mysql ON DUPLICATE KEY UPDATE 時的小坑以及其底層處理邏輯

    表 table 字段有**(id,column1,column2,column3)** id 為主鍵 column1 , column2 有復(fù)合唯一約束 這里插入一個已經(jīng)存在的數(shù)據(jù)(只是 column1 , column2 一樣, column3 不一樣) 報錯: Field ‘id’ doesn’t have a default value 按理說 column1 , column2 一樣應(yīng)該走更新操作,但是這里走的插入操作,參考

    2024年02月09日
    瀏覽(24)
  • mysql中insert語句的五種用法

    insert語句是標準sql中的語法,是插入數(shù)據(jù)的意思。在實際應(yīng)用中,它也演變了很多種用法來實現(xiàn)特殊的功能,下面介紹在mysql數(shù)據(jù)庫中insert語句的五種用法。 語法: 如果插入多條數(shù)據(jù),需要寫多條sql。 語法: 多條數(shù)據(jù)1條sql即可,相較于方法1效率更高。 語法: 多條數(shù)據(jù)使用

    2023年04月25日
    瀏覽(15)
  • insert into select 語法使用

    INSERT INTO SELECT語句:從一個表復(fù)制數(shù)據(jù),然后把數(shù)據(jù)插入到一個已存在的表中。 將一個table1的數(shù)據(jù)的部分字段復(fù)制到table2中,或者將整個table1復(fù)制到table2中, 這時候我們就要使用SELECT INTO 和 INSERT INTO SELECT 表復(fù)制語句了。 1.INSERT INTO SELECT語句 語句形式為:Insert into Table2(fie

    2024年02月16日
    瀏覽(31)
  • DBeaver同時執(zhí)行多條insert into報錯處理

    DBeaver同時執(zhí)行多條insert into報錯處理

    之前使用的數(shù)據(jù)庫連接軟件Navicat的破解版,后來公司要求不可以使用破解版的Navicat,所以就換了DBeaver。 這是一個很不錯的軟件,免費,而且可以連接不同類型的數(shù)據(jù)庫,MySQL、Oracle、hive、SQLserver等都可以使用,很方便也很良心,但是在使用的過程中發(fā)現(xiàn)了一個問題,DBeav

    2024年02月11日
    瀏覽(19)
  • 第3.1章:StarRocks數(shù)據(jù)導(dǎo)入--Insert into

    第3.1章:StarRocks數(shù)據(jù)導(dǎo)入--Insert into

    Insert Into是我們在MySQL中常用的導(dǎo)入方式,StarRocks同樣也支持使用Insert into的方式進行數(shù)據(jù)導(dǎo)入,并且每次insert into操作都是一次完整的導(dǎo)入事務(wù)。 在StarRocks中,Insert的語法和MySQL等數(shù)據(jù)庫的語法類似,具體可以參考官網(wǎng)文檔: Insert Into 導(dǎo)入 @ InsertInto @ StarRocks Docs https://docs.s

    2024年02月08日
    瀏覽(24)
  • hive表數(shù)據(jù)更新insert overwrite/merge into

    根據(jù)甲方要求,需要對大數(shù)據(jù)平臺指定表(hive、impala表)的歷史數(shù)據(jù)[2021-01-01至2023-03-29]指定字段進行批量更新,然后把表同步到Oracle。先更新大數(shù)據(jù)平臺上的表,再把更新完成的表同步到Oracle。hive有8張表更新,其中4張大表【分區(qū)表】(數(shù)據(jù)量分別為:1038738976、260958144、2586

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包