本文目錄一覽:
- 1、說明在java程序中連接並查詢Mysql的主要命令和步驟
- 2、MySQL與Redis數據庫連接池介紹(圖示+源碼+代碼演示)
- 3、簡述mysql建立連接過程
- 4、Mysql連接join查詢原理知識點
- 5、簡介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-hk/n/329686.html