mysql連接查詢流程源碼(mysql 查詢流程)

本文目錄一覽:

說明在java程序中連接並查詢Mysql的主要命令和步驟

java程序連接MySql的主流方法是通過JDBC,你需要去MySql官網下一個他們的驅動包,然後以外部包的形式導入到項目中

建立連接

進行查詢

Class.forName(“com.mysql.jdbc.Driver”);

//DatabaseName是資料庫名

Connection ct=DriverManager.getConnection(“jdbc:mysql://localhost:3306/DatabaseName”,username,password);

//此時就可以使用這個連接進行增刪改查了

我這裡貼上我以前寫的一個demo的部分查詢代碼

PreparedStatment ps=ct.prepareStatement(“select * from students where Number=?”);//sql語句結尾不需要;

//?可以為任何類型 在函數中聲明 類似ps.set類型(第幾個,數據);

//sql語句可以為任何種類,第一個是從1開始

ps.setInt(1,2);

ResultSet rs=ps.executeQuery();

while(rs.next()){

    int Number=rs.getInt(1);//第一個欄位,順序與sql語句查詢的順序對應,若為*則按照表中欄位順序獲取

    Time Time=rs.getTime(3);

    String Name=rs.getString(2);

    String Sex=rs.getString(4);

    System.out.println(“編號:”+Number+”,姓名:”+Name+”,出生時間:”+Time+”,性別:”+Sex);

}

項目最後需要關閉連接

ct.close();

MySQL與Redis資料庫連接池介紹(圖示+源碼+代碼演示)

資料庫連接池(Connection pooling)是程序啟動時建立足夠的資料庫連接,並將這些連接組成一個連接池,由程序動態地對池中的連接進行申請,使用,釋放。

簡單的說:創建資料庫連接是一個很耗時的操作,也容易對資料庫造成安全隱患。所以,在程序初始化的時候,集中創建多個資料庫連接,並把他們集中管理,供程序使用,可以保證較快的資料庫讀寫速度,還更加安全可靠。

不使用資料庫連接池

如果不使用資料庫連接池,對於每一次SQL操作,都要走一遍下面完整的流程:

1.TCP建立連接的三次握手(客戶端與 MySQL伺服器的連接基於TCP協議)

2.MySQL認證的三次我收

3.真正的SQL執行

4.MySQL的關閉

5.TCP的四次握手關閉

可以看出來,為了執行一條SQL,需要進行大量的初始化與關閉操作

使用資料庫連接池

如果使用資料庫連接池,那麼會 事先申請(初始化)好 相關的資料庫連接,然後在之後的SQL操作中會復用這些資料庫連接,操作結束之後資料庫也不會斷開連接,而是將資料庫對象放回到資料庫連接池中

資源重用:由於資料庫連接得到重用,避免了頻繁的創建、釋放連接引起的性能開銷,在減少系統消耗的基礎上,另一方面也增進了系統運行環境的平穩性(減少內存碎片以及資料庫臨時進程/線程的數量)。

更快的系統響應速度:資料庫連接池在初始化過程中,往往已經創建了若干資料庫連接置於池中備用。 此時連接的初始化工作均已完成。對於業務請求處理而言,直接利用現有可用連接,避免了從資料庫連接初始化和釋放過程的開銷,從而縮減了系統整體響應時間。

統一的連接管理,避免資料庫連接泄露:在較為完備的資料庫連接池實現中,可根據預先的連接佔用超時設定,強制收回被佔用連接。從而避免了常規資料庫連接操作中可能出現的資源泄露。

如果說你的伺服器CPU是4核i7的,連接池大小應該為((4*2)+1)=9

相關視頻推薦

90分鐘搞懂資料庫連接池技術|linux後台開發

《tcp/ip詳解卷一》: 150行代碼拉開協議棧實現的篇章

學習地址:C/C++Linux伺服器開發/後台架構師【零聲教育】-學習視頻教程-騰訊課堂

需要C/C++ Linux伺服器架構師學習資料加qun 812855908 獲取(資料包括 C/C++,Linux,golang技術,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK,ffmpeg 等),免費分享

源碼下載

下載方式:(Github中下載)

db_pool目錄下有兩個目錄,mysql_pool目錄為MySQL連接池代碼,redis_pool為redis連接池代碼

下面介紹mysql_pool

CDBConn解析

概念: 代表一個數據連接對象實例

相關成員:

m_pDBPool:該資料庫連接對象所屬的資料庫連接池

構造函數: 綁定自己所屬於哪個資料庫連接池

Init()函數: 創建資料庫連接句柄

CDBPool解析

概念:代表一個資料庫連接池

相關成員:

Init()函數:常見指定數量的資料庫實例句柄,然後添加到m_free_list中,供後面使用

GetDBConn()函數: 用於從空閑隊列中返回可以使用的資料庫連接句柄

RelDBConn()函數: 程序使用完該資料庫句柄之後,將句柄放回到空閑隊列中

測試之前,將代碼中的資料庫地址、埠、賬號密碼等改為自己的(代碼中有好幾處)

進入MySQL, 創建mysql_pool_test資料庫

進入到mysql_pool目錄下, 創建一個build目錄並進入 :

然後輸入如下的命令進行編譯

之後就會在目錄下生成如下的可執行文件

輸入如下兩條命令進行測試: 可以看到不使用資料庫連接池,整個操作耗時4秒左右;使用連接池之後,整個操作耗時2秒左右,提升了一倍

源碼下載

下面介紹redis_pool

測試

進入到redis_pool目錄下, 創建一個build目錄並進入 :

然後輸入如下的命令進行編譯

之後就會在目錄下生成如下的可執行文件

輸入如下的命令進行測試: 可以看到不使用資料庫連接池,整個操作耗時182ms;使用連接池之後,整個操作耗時21ms,提升了很多

進入redis,可以看到我們新建的key:

簡述mysql建立連接過程

在以前不論是使用SQLyog MySQL GUI或是phpMyAdmin訪問資料庫,第一步一定是輸入訪問資料庫的賬號與密碼,當然Dreamweaver也不例外。在Dreamweaver中,我們通過建立 【MySQL聯機】告訴Dreamweaver連接的MySQL資料庫地址、名稱,以及訪問的賬號和密碼。

在一個網站中,我們只需對一個資料庫建立一次MySQL連接。通常網路上的主機空間也只支持訪問一個資料庫。例如虛擬主機,最基本的方案是搭配1個MySQL資料庫。

在【文件】面板中打開index.php,接著選擇【應用程序】→【資料庫】面板,單擊【+】按鈕後選擇【MySQL連接】。

建立MYSQL連接

在建立資料庫連接前,我們必須設置好圖6-5中的前面3個選項,如果依照書中敘述設置好,那麼基本上便不會有問題。當然必須至少打開一個網頁,否則會有無法選擇的情況發生。

未打開頁面,選項均無法選擇

彈出如圖6-7所示的窗口,請依照其下面的說明進行設置。可以單擊【測試】按鈕測試是否有問題,單擊【確定】按鈕後就可以在【應用程序】→【資料庫】面板中看到所建立的資料庫連接。我們可以操作這個樹狀結構(見圖6-8)檢查連接的資料庫、數據表與欄位名稱及屬性等。也可以打開phpMyAdmin來檢查資料庫結構,並與面板內的信息對比。欄位與功能說明。

建立連接

資料庫內的數據表、欄位和屬性

欄位與功能說明

字 段

說 明

連接名稱

依個人喜好自由輸入

MySQL伺服器

MySQL伺服器的位置,一般設置為localhost,除非所要存取的MySQL資料庫不在網頁所在的主機上,而且該MySQL資料庫也提供對外的連接

用戶名

訪問MySQL資料庫的用戶名稱

密碼

訪問MySQL資料庫的用戶密碼

資料庫

選擇所要建立連接的資料庫名稱,可以單擊【選取】按鈕瀏覽MySQL伺服器上的所有資料庫。我們選擇剛導入的範例資料庫database

在建立完成MySQL連接後,在【文件】面板中會看到Dreamwaver自動建立了Connections文件夾,在該文件夾下有一個與前面所建立的MySQL連接名稱相同的文件。

Connections文件夾

Connections文件夾是Dreamweaver用來存放MySQL連接設置文件的文件夾。

打開該文件並使用【代碼】視圖,可以看到有關連接資料庫的設置。

資料庫連接設置

在這個文件中定義了與MySQL伺服器的連接(mysql_pconnect函數),包括以下內容。

$hostname:MySQL伺服器的地址。

$database:連接資料庫的名稱。

$username:用戶名稱。

$password:用戶密碼。

定義的值與我們前面在圖形界面所設置的值是對應的,然後利用函數mysql_pconnect與資料庫連接。連接後才能對資料庫進行查詢、新增、修改或刪除的操作。

如果在網站製作完成後將文件上傳至網路上的主機空間時發現,網路上的MySQL伺服器訪問的用戶名、密碼等方面與本機設置有所不同,可以直接修改位於Connection文件夾下的db_conn.php文件。但還是建議直接在本機配合網路主機上的環境來設置。例如,你擁有虛擬主機所提供的MySQL資料庫名稱為xu354jp6,但在本機卻要命名為Charles,雖然可能會好看些,但到時候就會多一個麻煩了。

對於如何將本機已經完成的網站移植到網路上的空間,將在附錄中有詳細的介紹。

總之,在建立好資料庫連接後,除非要連接MySQL資料庫里的另一個資料庫,否則不需要再做這個步驟了。

Mysql連接join查詢原理知識點

Mysql連接(join)查詢

1、基本概念

將兩個表的每一行,以「兩兩橫向對接」的方式,所得到的所有行的結果。

假設:

表A有n1行,m1列;

表B有n2行,m2列;

則表A和表B「對接」之後,就會有:

n1*n2行;

m1+m2列。

2、則他們對接(連接)之後的結果類似這樣:

3、連接查詢基本形式: from

表1

【連接方式】

join

表2

【on連接條件】連接查詢基本形式: from

表1

【連接方式】

join

表2

【on連接條件】

1、連接查詢的分類

交叉連接

其實就是兩個表之間按連接的基本概念,進行連接之後所得到的「所有數據」,而對此無任何「篩選」的結果——篩選就是指連接條件。

即:交叉連接就是沒有條件的「全部連接」——有稱為 笛卡爾積。

交叉連接通常沒有實用價值,因為這樣連接之後 數據,每一行數據的意義就可能會「丟失」。

形式:

from

表1

【cross】

join

表2

或:

from

表1

表2

內連接

形式:

from

表1

【inner】

join

表2

on

表1.欄位1

=

表2.欄位2;

含義:

取得一個「交叉連接」的結果中,滿足所設定的連接條件(就是on後面的條件)的那些行的數據;

交叉連接往往會有「無意義數據」,如下:

2、看內連接的結果:

3、結果為:

4、可見:內連接其實就是找出一個交叉連接的數據結果中,「有意義」的那些數據行。而一個交叉連接,其中的數據,有的有意義,有的沒有意義(錯誤數據)。

但是,要注意:

1,這種連接條件,不是隨意設置,而是要根據表之間的實際關係來設置,通常該關係就是兩個表之間的具有「主外鍵關係」的兩個欄位的值相等。

2,可見,連接查詢,跟我們之前所學的「外鍵關係」,是有其內在的邏輯一致性的。

3,不過,我們做內連接的時候,並不是要求2個表「必須」有外鍵關係——我們只是自己從現實角度理解他們有外鍵關係(數據關係)就可以,而在查詢的時候使用內連接就建立起了他們的關係。可見:內連接其實就是找出一個交叉連接的數據結果中,「有意義」的那些數據行。而一個交叉連接,其中的數據,有的有意義,有的沒有意義(錯誤數據)。

您可能感興趣的文章:MySQL

left

join操作中on和where放置條件的區別介紹mysql使用from與join兩表查詢的區別總結mysql多個left

join連接查詢用法分析MySQL優化之使用連接(join)代替子查詢Mysql中的join操作

簡介mysql之mysql語句執行流程

1.一條查詢語句如何執行?

2.一條更新語句如何執行?

3.innodb的redolog是什麼?

4.什麼是寫緩衝

5.寫緩衝一定好嗎?

6.什麼情況會引發刷臟頁

關於一條mysql查詢語句在mysql中的執行流程

如select name from test where id=10;

1.連接器—先與mysql服務端連接器建立連接,若查詢緩存命中則直接返回 (查詢緩存的弊端:查詢緩存的失效非常頻繁,只要有對一個表的更新,這個表上所有的查詢緩存都會被清空。)

2.分析器—詞法分析告訴服務端你要幹什麼(我要找 test表中id為10的名字) ( 其中sql語法錯誤在這塊暴露 )

3.優化器—服務端會思考該怎麼執行最優(索引的選擇)

4.執行器—檢查用戶對庫對錶的許可權

5.存儲引擎–存儲數據,提供讀寫介面

以update a set name=1 where id=1;

主要區別在於在查詢到數據之後(select name from a where id=1),如果是innodb引擎它會進行日誌的兩階段提交:

1.開啟事務,寫入redolog(innodb引擎特有),並更新內存

3.寫入binlog,提交事務,commit

我們知道mysql數據存儲包含內存與磁碟兩個部分,innodb是按數據頁(通常為16k)從磁碟讀取到內存中的(剩餘操作在內存中執行),當要更新數據時,若目標數據的數據頁剛好在內存中,則直接更新。不在呢?

將這個更新操作(也可能是插入) 緩存在change buffer中 (redolog也會記錄這個change buffer操作)等到下一次查詢要用到這些數據時,再執行這些操作,改變數據(稱為合併操作記錄稱為merge)。

innodb_change_buffer_max_size

innodb_change_buffering

先介紹兩個概念

因為redolog是環形日誌,當redolog寫滿時,就需要「擦掉」開頭的一部分數據來達到循環寫,這裡的擦掉指,指將redolog日誌的checkpoint位置從 CP推進到CP『 ,同時將兩點之間的臟頁刷到磁碟上(flush操作),此時系統要停止所有的更新操作(防止更新操作丟失)

1.系統內存不足。當要讀取新的內存頁時就要淘汰一些數據頁,如果淘汰的正好是臟頁,就要執行一次flush操作

2.Mysql認為系統處於「空閑狀態」

3.正常關閉Mysql

上述後兩者場景(系統空閑和正常關閉)對於性能都沒太大影響。

當為第一種redolog寫滿時,系統無法執行更新操作,所有操作都會堵塞

當為第二種內存不夠用時,如果淘汰臟頁太多,影響mysql響應時間

後兩者刷臟頁會影響性能,所以Mysql需要有刷臟頁控制策略,可以從以下幾個設置項考慮

1.設置innodb_io_capacity告訴innodb所在主機的IO能力

原創文章,作者:NWOAP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329686.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NWOAP的頭像NWOAP
上一篇 2025-01-14 18:55
下一篇 2025-01-14 18:55

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • 雲智直聘 源碼分析

    本文將會對雲智直聘的源碼進行分析,包括前端頁面和後端代碼,幫助讀者了解其架構、技術實現以及對一些常見的問題進行解決。通過本文的閱讀,讀者將會了解到雲智直聘的特點、優勢以及不足之處,…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python網站源碼解析

    本文將從多個方面對Python網站源碼進行詳細解析,包括搭建網站、數據處理、安全性等內容。 一、搭建網站 Python是一種高級編程語言,適用於多種領域。它也可以用於搭建網站。最常…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL資料庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28
  • 源碼是什麼

    源碼是一段計算機程序的原始代碼,它是程序員所編寫的可讀性高、理解性強的文本。在計算機中,源碼是指編寫的程序代碼,這些代碼按照一定規則排列,被計算機識別並執行。 一、源碼的組成 源碼…

    編程 2025-04-27
  • Python爬蟲流程用法介紹

    本文將介紹Python爬蟲的流程,包括數據採集、數據處理以及數據存儲等方面。如果想要使用Python爬取網站數據,本文將為您提供詳細的指導和實例。 一、數據採集 1、確定目標網站 …

    編程 2025-04-27
  • Go源碼閱讀

    Go語言是Google推出的一門靜態類型、編譯型、並髮型、語法簡單的編程語言。它因具有簡潔高效,內置GC等優秀特性,被越來越多的開發者所鍾愛。在這篇文章中,我們將介紹如何從多個方面…

    編程 2025-04-27

發表回復

登錄後才能評論