日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何插入? | 非开车,纯技术交流

發(fā)布時間:2025/3/16 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何插入? | 非开车,纯技术交流 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MySQL有一系列的語句,可以往數(shù)據(jù)庫新增數(shù)據(jù),稱作范插入語句(insert-like statement)。不同的插入方式,對自增鍵的影響是不一樣的。

畫外音:自增鍵,是指auto_increment,大家應該都用得很多。

?

更為細化后,總的來說,插入方式分為三類:

  • 簡單插入(simple insert)

  • 批量插入(bulk insert)

  • 混合插入(mixed-mode insert)

?

什么是簡單插入(simple insert)?

普通的insert/replace語句,不管是單條插入還是多條插入,都是簡單插入。

畫外音:

(1)不包含遞歸的子查詢;

(2)不包含insert … on duplicate key update… ;

?

insert into t1(id, name) values(1,"shenjian"); insert into t1(name) values("zhangsan"),("lisi"),("ww");

都是簡單插入。

?

簡單插入的特點是,能夠提前知道被插入的行數(shù)。

?

因此,這類插入,在處理自增鍵時,是最容易的。

畫外音:很容易保證自增鍵連續(xù)性。

?

什么是批量插入(bulk insert)?

與簡單插入相對,在插入時,不知道被插入的行數(shù),是批量插入。

?

insert into t1(name) select name from t2;

?

除此之外,像:

  • replace … select …

  • load data

都是批量插入。

?

由于不能夠提前知道多少行插入,在處理自增列時,每插入一行,才會賦值新的自增值。

畫外音,官網(wǎng)原文是:

InnoDB assigns new values for the AUTO_INCREMENT column one at a time as each row is processed.

?

這里的潛臺詞是,在批量插入事務并發(fā)時,“可能”出現(xiàn)同一個事務的自增鍵不連續(xù)。

畫外音:為啥是“可能”呢?潛在解決方案,未來撰文詳述。

?

什么是混合插入(mixed-mode insert)?

insert into t1(id, name) values?(111,"111"),(NULL,?"abc"),(222,"222"),(NULL,"xyz");

?

有些行插入指定了自增鍵,無需數(shù)據(jù)庫生成;

有些行插入未指定自增鍵(NULL),需要數(shù)據(jù)庫生成。

畫外音:具體走哪個分支,實際執(zhí)行時才知道。

?

以及

insert into t1(name) values("shenjian"),("aaa"),("bbb") on duplicate key update count=100;

?

有些行插入實際上是修改,無需數(shù)據(jù)庫生成自增鍵;

有些行插入實際上就是插入,需要數(shù)據(jù)庫生成自增鍵。

畫外音:具體走哪個分支,也是實際執(zhí)行時才知道。

?

insert … on duplicate key update … 這種情況是最最復雜的,它可能導致,系統(tǒng)生成的自增值,在更新階段用不上。

畫外音,官網(wǎng)原文是:

an INSERT followed by a UPDATE, where the allocated value for the AUTO_INCREMENT column may or may not be used during the update phase.?

最后,再挖兩個坑,大伙想想。

?

作業(yè)題一:

insert into t1(name)values("zhangsan"),("lisi"),("wangwu");

這類簡單插入,當有并發(fā)事務執(zhí)行時,自增鍵仍能保證連續(xù)性,是如何做到的?

A: 行粒度加鎖,實施互斥

B: 表粒度加鎖,實施互斥

C: 全局自增鍵單例,實施互斥

D: SQL語句粒度加鎖,實施互斥

E: 事務粒度加鎖,實施互斥

?

作業(yè)題二:

基于SQL復制的主從同步,如果執(zhí)行并發(fā)批量插入(bulk insert)事務,“可能”出現(xiàn)同一個事務的自增鍵不連續(xù),那么能否保證主從數(shù)據(jù)的一致性?如果能,是怎么保證的?

?

- MORE | 更多精彩文章 -

  • 沒想到,遠程工作的時代竟然這么到來了

  • 作為阿里的面試官,我有話想說。

  • 互聯(lián)網(wǎng)公司為啥都不用MySQL分區(qū)表?

  • 微服務架構(gòu)的四大金剛利器

如果你喜歡本文,

請長按二維碼,關注?Hollis.

轉(zhuǎn)發(fā)至朋友圈,是對我最大的支持。

好文章,我在看??

總結(jié)

以上是生活随笔為你收集整理的如何插入? | 非开车,纯技术交流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。