本文目錄一覽:
- 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-tw/n/329686.html