MySQL的連線方式 事務 效能優化

2022-03-18 01:25:01 字數 4907 閱讀 1095

1. mysql一般的連線方式都有哪些,各自優缺點。

mysql:過程式風格,最常用。

mysqli:mysql的增強擴充套件,提供了過程化物件導向兩種風格的api,增加了預編譯和引數繫結等新特性, 但只支援mysql。

pdo:在語法上更接近mysqli,但pdo擴充套件只是乙個抽象的介面層,利用pdo擴充套件本身並不能實現任何資料庫操作,必須使用乙個特定的資料庫pdo驅動訪問資料庫。pdo支援多種資料庫,不管訪問mysql還是oracle,都可以用同樣的api對資料進行操作。

2. 乙個pdo類裡面,基本上有哪些東西?

pdo中包含三個預定義類:pdo、pdostatement和pdoexception:

pdo類:代表乙個php和資料庫之間的連線。

方法

pdo - 構造器,構建乙個新的pdo物件

begintransaction - 開始事務

commit - 提交事務

errorcode - 從資料庫返回乙個錯誤代號,如果有的話

errorinfo - 從資料庫返回乙個含有錯誤資訊的陣列,如果有的話

exec - 執行一條sql語句並返回影響的行數

getattribute - 返回乙個資料庫連線屬性

lastinsertid - 返回最新插入到資料庫的行(的id)

prepare - 為執行準備一條sql語句,返回語句執行後的聯合結果集(pdostatement)

query - 執行一條sql語句並返回乙個結果集

quote - 返回新增了引號的字串,以使其可用於sql語句中

rollback - 回滾乙個事務

setattribute - 設定乙個資料庫連線屬性

$dsn = 'mysql:dbname = testdb; host = 127.0.0.1';   // 配置pdo的資料來源

$user = 'dbuser';

$password = 'dbpass';

try catch (pdoexception $e)

/* 事務處理開始,關閉自動提交事務(autocommit) */

$dbh->begintransaction();

/* 更改資料庫結構 */

$sth = $dbh->exec("drop table fruit");

/* 提交事務 */

$dbh->commit();

pdostatement類:代表一條預處理語句以及語句執行後的聯合結果集(associated result set)。

方法

bindcolumn - 繫結乙個php變數到結果集中的輸出列

bindparam - 繫結乙個php變數到乙個預處理語句中的引數

bindvalue - 繫結乙個值到與處理語句中的引數

closecursor - 關閉游標,使語句可以再次執行

columncount - 返回結果集中的列的數量

errorcode - 從語句中返回乙個錯誤代號,如果有的話

errorinfo - 從語句中返回乙個包含錯誤資訊的陣列,如果有的話

execute - 執行一條預處理語句

fetch - 從結果集中取出一行

fetchall - 從結構集中取出乙個包含了所有行的陣列

fetchcolumn - 返回結果集中某一列中的資料

getattribute - 返回乙個 pdostatement 屬性

getcolumnmeta - 返回結果集中某一列的結構(metadata?)

nextrowset - 返回下一結果集

rowcount - 返回sql語句執行後影響的行數

setattribute - 設定乙個pdostatement屬性

setfetchmode - 為 pdostatement 設定獲取資料的方式

pdoexception類:對exception異常基類的重寫,返回pdo觸發的錯誤。

try 

$dbh = null;

} catch (pdoexception $e)

3. 事務用來幹什麼?

銀行轉賬業務、電子商務支付業務等等。

比如:使用者下訂單並且已經支付,假設有兩張表,訂單表和使用者賬戶表。

當使用者點選確認支付的時候需要對這兩張表進行操作,如果對訂單表的操作成功了、對使用者賬戶表的操作失敗了,此時訂單狀態是已支付,但使用者的錢卻沒扣掉,商家就就虧了。

這時候如果採用事務,就可以回滾,提示使用者支付失敗,資料表沒有發生任何改動。

4. 事務的特性都有哪些?

事務四大特性(簡稱acid) :

原子性(atomicity):事務中的全部操作在資料庫中是不可分割的,要麼全部完成,要麼均不執行。

一致性(consistency):幾個並行執行的事務,其執行結果必須與按某一順序序列執行的結果相一致。

隔離性(isolation):事務的執行不受其他事務的干擾,事務執行的中間結果對其他事務必須是透明的。

永續性(durability):對於任意已提交事務,系統必須保證該事務對資料庫的改變不被丟失,即使資料庫出現故障。

5. 已給資料庫的操作中,怎麼能保證這些特性都做到呢?

mysql的事務特性就是要求這組操作要不全都成功,要不全都失敗。這樣就避免了某個操作成功某個操作失敗,有利於資料的安全。

主要有三個操作:

begin 開始乙個事務

rollback 事務回滾

commit 事務確認

在改動資料庫之前,我們要開啟事務,begin(或start transaction);

正常執行我們的sql語句;

當sql語句執行完畢,存在兩種情況:

1)全都成功,我們要將sql語句對資料庫造成的影響提交到資料庫中,commit;

2)某些sql語句失敗或程式報異常,就捕捉異常,並rollback(回滾),將對資料庫操作趕緊撤銷,這樣資料庫裡面的資料就不會有任務的編號變化。

也就是:

同時更新多個記錄,但其中乙個更新失敗,則全部退回到更新操作開始之前。

只有全部更新成功,才確認寫入db。

注:mysql的事務處理功能在mysiam儲存引擎中是不支援的,在innodb儲存引擎中是支援的。

6. mysql效能優化有哪些?

優化需要從多方面講

1 sql級別的優化

2 建表的優化

3 mysql配置的優化

4 作業系統級別優化

5 硬體相關優化

6.1 sql級別的優化

sql優化的一般步驟:

1.通過show status命令了解各種sql的執行頻率。

2.定位執行效率較低的sql語句-(重點select)。

3.通過explain分析低效率的sql。

4.確定問題並採取相應的優化措施。

1)盡量避免在列上進行運算,這樣會導致索引失效。

2)使用join時,應該用小結果集驅動大結果集。同時把複雜的join查詢拆分成多個query。因為join多個表時,可能導致更多的鎖定和堵塞。

3)注意like模糊查詢的使用,避免%%。

4)避免select ,僅列出需要查詢的字段,節省記憶體。

5)使用批量插入語句節省互動。

6)limit的基數比較大時使用between。

7)不要使用rand函式獲取多條隨機記錄。

8)避免使用null。

9)不要使用count(id),而應該是count()。

10)不要做無謂的排序操作,而應盡可能在索引中完成排序。

6.2 建表的優化

1)乙個表不要有太多的字段;

2)注意欄位的命名和資料型別;

3)資料量過大時考慮分表;

4)選擇合適的資料庫引擎。

選擇儲存引擎的基本原則如下:

6.3 mysql配置的優化

1) 關閉不必要的二進位制日誌和慢查詢日誌,僅在記憶體足夠或開發除錯時開啟它們。

使用下面的語句檢視查詢是否開啟:

show variables like '%slow%';
還可以使用下面的語句檢視慢查詢的條數,定期開啟方便優化:

show global status like '%slow%';
2)適度使用query cache。

3)增加mysql允許的最大連線數。

4)對於myisam表適當增加key_buffer_size,注意table_cache的設定。

5)對於innodb表,注意innodb_buffer_pool_size引數。

6)從表中刪除大量行後,可執行optimize table tablename進行碎片整理。

6.4 作業系統級別優化

使用64位的系統,因為64位的記憶體遠比32位的記憶體大。

6.5 硬體相關優化

選擇好的cpu,好的記憶體條,ssd硬碟,網路頻寬加大。

mysql 連線 MySQL的連線方式

連線mysql操作是連線程序和mysql資料庫例項進行通訊。從開發的角度來說,本質上是程序通訊。常用的程序通訊方式有管道 命名管道 命名字 tcp ip套接字 unix網域名稱套接字。mysql提供的連線方式從本質上看都是上述提及的程序通訊方式。tcp ip tcp ip套接字方式是mysql在任何...

mysql卡的調優思路 MySQL效能調優思路

1.mysql效能調優思路 如果一台伺服器出現長時間負載過高 週期性負載過大,或偶爾卡住如何來處理?是週期性的變化還是偶爾問題?是伺服器整體效能的問題,還是某單條語句的問題?具體到單條語句,這條語句是在等待上花的時間,還是查詢上花的時間?1.1.監測並觀察伺服器的狀態.觀察伺服器狀態,一般用如下2個...

MySQL的連線方式

連線mysql操作是連線程序和mysql資料庫例項進行通訊。從開發的角度來說,本質上是程序通訊。常用的程序通訊方式有管道 命名管道 命名字 tcp ip套接字 unix網域名稱套接字。mysql提供的連線方式從本質上看都是上述提及的程序通訊方式。tcp ip套接字方式是mysql在任何平台下都提供的...