mysql 事務 引擎_mysql引擎和事務

對于應用程序和用戶來說,同樣一張表的數據無論用什么引擎來存儲,看到的數據都是一樣的,只是不同的引擎在功能、占用空間大小、讀取性能等方面可能有所差別。

mysql最常用的存儲引擎為Innodb、MyISAM和全文索引

5.5.5以前默認存儲引擎為MyISAM,5.5.5及之后默認存儲引擎為Innodb

mysql> show engines \G查看當前數據庫系統支持的引擎

mysql5.5支持事務的引擎:Innodb/ndb(集群的引擎)

對于MyISAM來說,每一個表對應于磁盤上的三個文件,這三個文件名稱相同,擴展名不同。

.frm文件保存表的定義(是服務器而不是MyISAM引擎的一部分),.MYD保存表的數據,.MYI是表的索引文件(可參考mysql的系統庫mysql下的文件)

特點:

1.不支持事務

2.表級鎖定(更新時鎖定整個表),鎖定的成本小,但大大降低了并發性能

3.讀寫互相阻塞,不僅會在寫入的時候阻塞讀取,還會在讀取的時候阻塞寫入,但是讀不會阻塞另外的讀

4.只會緩存索引不能緩沖數據,可以通過key_buffer_size緩存索引,減少磁盤IO,但是只會緩存索引不會緩存數據

5.讀取速度較快,占用資源相對少(功能相對弱,鎖的粒度大)

6.不支持外鍵約束,但支持全文索引

7.mysql5.5.5默認的存儲引擎

適用的生產場景:單一對數據庫的操作(純讀或者純寫)可以使用

1.不需要事務支持的業務(例如轉賬、充值就不行)

2.一般為讀多或者寫多的網站應用,讀寫都頻繁的場景不適合

3.讀寫并發相對較低的業務(純讀純寫高并發也可以)

4.數據修改相對較少的業務

5.以讀為主的業務,例如www、blog、圖片信息數據庫

6.對數據一致性要求不很高的業務

7.硬件資源相對較差的機器

調優精要:

1.設置合適的索引

2.調整讀寫優先級,根據實際需要確保重要的操作更優先執行

3.啟用延遲插入改善大批量寫入性能(降低寫入頻率)

4.盡量順序操作,讓insert數據都寫入到尾部,減少阻塞

5.分解大的時間長的操作,降低單個操作的阻塞時間

6.降低并發數,某些高并發場景通過應用進行排隊隊列機制

7.對于相對靜態(更改不頻繁)的數據庫數據,充分利用query cache或者mamcached緩存服務極大的提高訪問效率

8.count只有在全表掃描的時候高效,帶有其他條件的count都需要進行實際的數據訪問

9.可以把主從同步的主庫使用Innodb,從庫使用MyISAM引擎(不推薦)

Innodb

特點:

1.支持事務

2.行級鎖定(更新時一般鎖定當前行),通過索引實現,如果進行全表掃描仍然會鎖全表與MyISAM相同,注意間隙鎖的影響

3.讀寫阻塞與事務隔離級別相關

4.具有高效的緩存特性,能緩存索引,也能緩存數據

5.整個表和主鍵以cluster方式存儲,組成一棵平衡樹

6.所有secondary index都會保存逐漸信息

7.支持分區和表空間,類似oracle數據庫

8.支持外鍵約束,5.5以前不支持全文索引,后續支持

9.與MyISAM相比對硬件資源要求相對較高

適用場景:

1.需要事務支持的業務

2.行級鎖定對高并發有很好的適應能力,但需要確保查詢通過索引完成

3.數據讀寫及更新都較為頻繁的場景,如bbs、sns、微博、微信等

4.對數據一致性要求較高的業務,例如充值轉賬

5.硬件設備內存大,可以利用Innodb較好的緩存能力來提高內存利用率,盡可能減少磁盤IO

6.與MyISAM引擎相比,Innodb引擎更消耗資源,速度沒有MyISAM快

調優精要:

1.主鍵盡可能小,避免給secondary index帶來過大壓力

2.避免全表掃描,否則會使用表鎖

3.盡可能緩存所有的索引和數據,提高響應速度,減少磁盤IO消耗

4.在大批量小插入的時候,盡量自己控制事務,而不要使用autocommit

4.合理設置innodb_flush_log_at_trx_commit,不要過度追求安全性

5.避免主鍵更新,這會帶來大量的數據移動

事務:邏輯上的一組sql語句操作,這組sql語句執行時要么全部成功要么全部失敗

事務的四大特性ACID

原子性(atomicity):事務是一個不可分割的單位,一個事務中的所有sql操作要么全部成功要么全部失敗

一致性(consistency):事務發生前和發生后,事務的完整性必須保持一致

隔離性(isolation):當并發訪問數據庫時,一個正在執行的事務在執行完畢前,對于其他會話是不可見的,多個并發事務之間的數據是互相隔離的(mysqldump時的參數--single-transaction)

持久性(durability):一個事務一旦被提交,它對數據庫中的數據改變就是永久性的,如果出了錯誤,事務不允許撤銷,只能通過“補償性事務”

mysql數據庫的事務默認是自動提交的。如果想多條sql在一個事務中執行,則需要使用事務進行處理。如果開啟一個事務沒有提交,mysql會自動回滾事務,或者手動使用rollback回滾。

start transaction開啟事務

rollback回滾事務

commit提交事務

mysql> show variables like '%commit%';結果為on或者off(默認為on)

表創建后修改引擎的方法

1.mysql語句修改

mysql> alter table test2 engine=MyISAM;

2.使用sed對備份內容進行引擎替換,即用mysqldump備份,使用sed對引擎做替換,再導入替換后的備份語句

3.linux命令mysql_convert_table_format修改

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529416.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shell mysql eof_shell EOF

1、考慮下面的需求&#xff0c;在主shell執行命令&#xff0c;進入其他的命令&#xff0c;后面的輸入&#xff0c;想作為命令的輸入&#xff0c;而不是主shell的輸入&#xff0c;怎么辦&#xff1f;2、使用<3、這里的EOF只是分界符&#xff0c;使用其他的字符也可以。4、比如…

MySQL查詢實驗報告_實驗報告數據庫的基本查詢'

《實驗報告數據庫的基本查詢》由會員分享&#xff0c;可在線閱讀&#xff0c;更多相關《實驗報告數據庫的基本查詢(5頁珍藏版)》請在人人文庫網上搜索。1、一、實驗目的&#xff1a;通過該實驗掌握應用SQL 查詢數據庫的基本方法&#xff0c;包括單表、多表查詢。二、實驗原理數…

mysql+odbc+ado_MFC ado+mysql+odbc技術分享

第一步&#xff1a;建立數據庫假設有一個sql文件mysql>use dbname; //創建一個數據庫名為dbname的數據庫(空數據庫)mysql>set names utf8; //編碼&#xff0c;mysql>source D:/dbname.sql; //導入一個數據庫源文件創建數據庫內容我做…

mysql 5.7 window x64_window環境配置Mysql 5.7.21 windowx64.zip免安裝版教程詳解

1.從官網下載mysql-5.7.21-windowx64.zip mysql下載頁面2.解壓到合適的位置(E:mysql) 這名字是我改過的3.配置環境變量&#xff0c;將E:mysqlbin 添加到PATH中4.在mysql目錄下(E:mysql) 創建 my.ini文件&#xff0c;內容如下&#xff1a;[mysql]# 設置mysql客戶端默認字符集def…

mysql設置查詢結果最大值_查找MySQL查詢結果字段的最大值

將它連接到僅有最大計數的第二個查詢。每天最內部查詢(對于給定用戶)每天計數的一組行數。從那以后&#xff0c;下一個外部執行從該集合中選擇MAX()來查找并獲得一個代表最高日數的記錄...因為它總是返回一行&#xff0c;并且加入到原始的numRequest表中它將是一個笛卡爾&#…

MySQL建表兩個單引號報錯_極客起源 - geekori.com - 問題詳情 - mysql建表報錯,查手冊看不懂,求解?...

創建帶索引的數據庫表需要為表名和屬性添加反單引號&#xff0c;并且你當前的primary key的位置需要調整一下&#xff1a;create table abc(id int unsigned auto_increment,usename char(20) not null default ,gender char(1) not null default ,weight tinyint unsigned not…

js 用下標獲取map值_javascript怎么獲取map的值?

Map對象保存鍵/值對&#xff0c;是鍵/值對的集合。任何值(對象或者原始值) 都可以作為一個鍵或一個值。Object結構提供了“字符串—值”的對應&#xff0c;Map結構提供了“值—值”的對應。JavaScript獲取map值示例&#xff1a;map對象如下&#xff1a;var mapObject {id1001:…

python attention機制_從零開始學Python自然語言處理(26)—— 強大的Attention機制...

前文傳送門&#xff1a;在上一次面試失利后&#xff0c;我回來仔細研究了一下Attention機制&#xff0c;研究完我不禁感悟&#xff0c;這機制真的厲害啊&#xff01;因為我之前面試被問到的Encoder - Decoder框架中有個瓶頸是編碼的結果以固定長度的中間向量表示&#xff0c;這…

[機器人-2]:開源MIT Min cheetah機械狗設計(二):機械結構設計

目錄 1、四肢朝向的選擇 2、電機布局形式的選擇 3、電機的選型及測試&#xff08;非常重要&#xff09; 4、結構優化 5、尺寸效應 6、其他 1、四肢朝向的選擇 機械狗的結構設計&#xff0c;第一個擺在我們面前的就說四肢的朝向問題&#xff0c;如下圖&#xff0c;我們是…

python傳文件給java_用java pyhont通過HTTP協議傳輸文件流

// 代碼網上抄的 忘記鏈接了 抱歉哈packageupload;importjava.io.BufferedReader;importjava.io.DataOutputStream;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;im…

mysql挪到小數點位置_mysql數據庫遷移到另一個硬盤上

archliun系統mysql數據庫1、對新硬盤分區與格式化1)# fdisk /dev/sdb2) # mkfs.ext4 /dev/sdb12、停止MYSQL服務systemctl stop mysqld3、對數據庫文件拷貝# cp -Rp data /mnt/data/4、刪除原data文件# rm -rf /data5、禁止開機自啟MYSQL服務# systemctl disable mysqld6、對自…

mysql用戶權限表join_MyBatis映射利用mysql left join 解決N+1查詢問題

1.權限是幾乎每個系統都需要的2.一般在用戶請求某個url的時候&#xff0c;都需要驗證用戶是否擁有該url的訪問權限3.最簡單的權限系統需要 用戶表&#xff0c;角色表&#xff0c;用戶角色表&#xff0c;權限表&#xff0c;角色權限表# Host: 127.0.0.1 (Version: 5.6.22)# Date…

python 爬取貝殼網小區名稱_如何使用 python 爬取全國小區名稱

前言筆者在做一個 NLPNLPNLP 項目時&#xff0c;需要識別小區名&#xff0c;因此想要查詢網上是否有相關的數據集。經過一番搜索后一無所獲…從而決定自己來爬取這份數據。由于爬取網站的內容信息之后可能會發生變更&#xff0c;因此此處給出具體的爬蟲思路&#xff0c;便于應對…

mysql hint 簡書_MySQL

為滿足不同數據庫設計要求&#xff0c;減少數據冗余而指定設計規范&#xff0c;可稱為數據庫范式數據庫范式呈遞次規范&#xff0c;即高階范式必然滿足低階范式越高的數據庫范式意味著越嚴格的設計要求&#xff0c;同時數據冗余越小第一范式(1NF)&#xff1a;數據庫表的每一列都…

python獲取手機通知欄消息_Python編寫簡單的通知欄腳本啟動工具

隨著自己編寫的腳本與安裝的工具越來越多,電腦的桌面和文件夾也越來越亂了。就在前幾天因為一個不小心,我把自己的一個項目給刪了,所以決定將電腦整理一下。不過這一整理我很多腳本和工具的位置我就忘記了,所以決定寫個小工具來快速啟動一些常用的腳本或工具這里選擇Python是因…

java 圓 繼承_java 類的繼承(轉)

這個星期主要是學習了Java中類的繼承問題.繼承就是由已有的類創建新類,通過子類繼承父類的方法,實現一些功能.下面就是老師布置作業的其中一個:定義父類圓&#xff0c;通過繼承&#xff0c;獲得子類球、圓錐、圓柱&#xff0c;子類具有計算體積的功能。1)新建文件夾Test1&#…

java爬蟲 京東_Java爬蟲實現京東物流查詢

網上沒有免費的接口&#xff0c;只能自己寫一套了&#xff0c;參考代碼如下public static JSONObject getLastInfo(String no){JSONObject jsonObjectnew JSONObject();jsonObject.put("no", no);Connection connectionJsoup.connect("http://www.jdwl.com/orde…

java list stream avg_Java 8 Stream API中的多個聚合函數

要在沒有自定義收集器的情況下執行此操作(不再對結果進行流式傳輸),您可以這樣做.它有點臟,因為它首先收集到Map< String,List< TimePeriodCalc>>然后流式傳輸該列表并獲得平均加倍.由于你需要兩個平均值,它們被收集到一個Holder或一對,在這種情況下我使用的是Abst…

java 發送郵件昵稱_利用JavaMail發送QQ郵件

一、RFC882文檔簡單說明RFC882文檔規定了如何編寫一封簡單的郵件(純文本郵件)&#xff0c;一封簡單的郵件包含郵件頭和郵件體兩個部分&#xff0c;郵件頭和郵件體之間使用空行分隔。郵件頭包含的內容有&#xff1a;from字段   --用于指明發件人to字段    --用于指明收件…

java沒有timer類_Java中的Java.util.Timer類 - Break易站

scheduleAtFixedRate(TimerTask task, long delay, long period): java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period)在指定的延遲語法后開始&#xff0c;為重復的固定速率執行調度指定的任務&#xff1a;public void scheduleAtFixedRate(TimerT…