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)。
方法:pdoexception類:對exception異常基類的重寫,返回pdo觸發的錯誤。bindcolumn - 繫結乙個php變數到結果集中的輸出列
bindparam - 繫結乙個php變數到乙個預處理語句中的引數
bindvalue - 繫結乙個值到與處理語句中的引數
closecursor - 關閉游標,使語句可以再次執行
columncount - 返回結果集中的列的數量
errorcode - 從語句中返回乙個錯誤代號,如果有的話
errorinfo - 從語句中返回乙個包含錯誤資訊的陣列,如果有的話
execute - 執行一條預處理語句
fetch - 從結果集中取出一行
fetchall - 從結構集中取出乙個包含了所有行的陣列
fetchcolumn - 返回結果集中某一列中的資料
getattribute - 返回乙個 pdostatement 屬性
getcolumnmeta - 返回結果集中某一列的結構(metadata?)
nextrowset - 返回下一結果集
rowcount - 返回sql語句執行後影響的行數
setattribute - 設定乙個pdostatement屬性
setfetchmode - 為 pdostatement 設定獲取資料的方式
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在任何平台下都提供的...