1. 如何安裝MySQL事務(wù)數(shù)據(jù)庫
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),柯坪企業(yè)網(wǎng)站建設(shè),柯坪品牌網(wǎng)站建設(shè),網(wǎng)站定制,柯坪網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,柯坪網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
MySQL數(shù)據(jù)庫分二種類型,一種是傳統(tǒng)的數(shù)據(jù)表格式,一種是支持事務(wù)處理的數(shù)據(jù)表格式(InnoDB,BDB,其中以InnoDB為主),下面我介紹一下關(guān)于MySQL事務(wù)處理數(shù)據(jù)庫的安裝及使用方法 你先要去下載一下Mysql max版的安裝程序,下載地址: 按常規(guī)的方法進(jìn)行安裝 安裝完成后,啟動(dòng)mysqlbinWinMySQLadmin 再退出 運(yùn)行 mysqlbinmydqld-nt --remove mysqlbinmysqld-max-nt --install 以上二行是去掉不支持事務(wù)處理的mysql服務(wù),改成支持mysql事務(wù)處理的服務(wù) 然后在c:下建一個(gè)ibdata目錄及iblogs目錄,當(dāng)然名字可以不一樣,記住這二個(gè)名字及盤符,以后要用到,你也可以不建在C盤,然后,打開c:winnt或c:windows目錄下的my。
ini,在最后添加:[code] innodb_data_file_path = ibdata1:2000M;ibdata2:2000M innodb_data_home_dir = c:ibdata set-variable = innodb_mirrored_log_groups=1 innodb_log_group_home_dir = c:iblogs set-variable = innodb_log_files_in_group=3 set-variable = innodb_log_file_size=30M set-variable = innodb_log_buffer_size=8M innodb_flush_log_at_trx_mit=1 innodb_log_arch_dir = c:iblogs innodb_log_archive=0 set-variable = innodb_buffer_pool_size=80M set-variable = innodb_additional_mem_pool_size=10M set-variable = innodb_file_io_threads=4 set-variable = innodb_lock_wait_timeout=50 [/code] 其中 innodb_data_file_path = ibdata1:2000M;ibdata2:2000M 這一行中的2000M可以自己改成200m,看你盤的容量大小,mysql推薦10G及以上的硬盤空間最好用這樣的設(shè)置; 以下這一行 innodb_data_home_dir = c:ibdata 也可以改成你自己起的目錄,主要是看你自己在剛才建的目錄在哪里啦 按照以上的方法,你已經(jīng)安裝好了mysql的事務(wù)數(shù)據(jù)庫,不過你要是按照mysql手冊(cè)上的方法安裝,把上面的一段配制放到my。 f是去的話,可是會(huì)出錯(cuò)哦 好了,現(xiàn)在讓我們?cè)囋嚳词遣皇前惭b完成了,啟動(dòng)apache,或iis,在服務(wù)里啟動(dòng)mysql的服務(wù),打開myadmin,輸入:SHOW variables like "have_%" 你要是看到下面的結(jié)果,那說明你安裝成功了。
2. Windows下MySQL策略有哪些
本次活動(dòng)將重點(diǎn)關(guān)注世界上最流行的開源數(shù)據(jù)庫最新版本MySQL 5。
5,其在Windows上運(yùn)行時(shí)能提供高達(dá)1500%的性能優(yōu)勢(shì)。 此次活動(dòng)還將詳細(xì)介紹,利用全新升級(jí)的MySQL企業(yè)版,Oracle如何超過Microsoft SQL Server,節(jié)省高達(dá)90%總體擁有成本,該企業(yè)版目前包括了建模、開發(fā)、監(jiān)測(cè)、管理和基于Windows 的MySQL應(yīng)用程序備份等的一整套可視化工具。
論壇將詳細(xì)介紹對(duì)Windows用戶和獨(dú)立軟件開發(fā)商的益處 利用在Windows平臺(tái)上運(yùn)行的MySQL企業(yè)版,甲骨文使客戶能夠大幅降低其在開發(fā)網(wǎng)絡(luò)應(yīng)用、部門級(jí)的應(yīng)用和嵌入式應(yīng)用軟件的總體擁有成本。同時(shí),借助甲骨文公司世界一流的24x7全天候服務(wù)支持,客戶能實(shí)現(xiàn)更高的MySQL性能,跨平臺(tái)的靈活性和提高管理。
首屆MySQL on Windows在線論壇將闡述: 為什么MySQL on Windows既受企業(yè)用戶也受嵌入式獨(dú)立軟件供應(yīng)商的熱烈歡迎。 MySQL為什么非常適合Windows環(huán)境,未來將會(huì)有什么樣的里程碑以實(shí)現(xiàn)MySQL在Microsoft平臺(tái)上更好運(yùn)行。
哪些可視化工具可用來有效地開發(fā)、部署和管理MySQL on Windows的應(yīng)用程序。 如何推出基于Windows平臺(tái)上的MySQL高可用關(guān)鍵業(yè)務(wù)應(yīng)用程序。
安全解決方案供應(yīng)商SonicWall公司為何選擇MySQL而沒有選擇Microsoft SQL Server,以及他們?nèi)绾纬晒Φ靥峁┗贛ySQL的解決方案。 甲骨文公司工程設(shè)計(jì)副總裁Tomas Ulin表示:“通過選擇MySQL on Windows,客戶能極大地降低成本和提高對(duì)跨平臺(tái)的支持。
甲骨文已經(jīng)推出了MySQL 5。5 和 MySQL 企業(yè)版的主要增強(qiáng)功能,這些功能將為客戶帶來巨大的益處。
對(duì)于正在創(chuàng)建和部署關(guān)鍵網(wǎng)絡(luò)業(yè)務(wù)和嵌入式應(yīng)用軟件的獨(dú)立軟件開發(fā)商和企業(yè)用戶來說,MySQL是替代Microsoft SQL Server的一個(gè)極具吸引力的選擇。” SonicWall產(chǎn)品管理總監(jiān)Jan Sijp說:“把MySQL嵌入到我們的安全產(chǎn)品中已被證明是明智選擇,通過與我們的自身專業(yè)相結(jié)合,MySQL能夠幫助我們?yōu)榭蛻籼峁└叨瓤煽康年P(guān)鍵解決方案,客戶將能從集成、方便使用的解決方案中受益,而不必安裝一個(gè)單獨(dú)的數(shù)據(jù)庫。
除了為客戶減少復(fù)雜度之外,我們也降低了內(nèi)部開發(fā)、測(cè)試和支持的成本?!?。
3. MYsql和sql到底是不是一個(gè)東西
MYsql和sql不同,為了表達(dá)的更科學(xué)更準(zhǔn)確,我介紹你看比較權(quán)威的文章,大家一起學(xué)習(xí),聲明,下面不是我的作品,請(qǐng)注意尊重版權(quán)。
文章來源:數(shù)據(jù)庫聯(lián)盟網(wǎng) 發(fā)布時(shí)間:2005-03-25 07:30:55 對(duì)于程序開發(fā)人員而言,目前使用最流行的兩種后臺(tái)數(shù)據(jù)庫即為MySQL and SQL Server。 這兩者最基本的相似之處在于數(shù)據(jù)存儲(chǔ)和屬于查詢系統(tǒng)。
你可以使用SQL來訪問這兩種數(shù)據(jù)庫的數(shù)據(jù),因?yàn)樗鼈兌贾С諥NSI-SQL。還有,這兩種數(shù)據(jù)庫系統(tǒng)都支持二進(jìn)制關(guān)鍵詞和關(guān)鍵索引,這就大大地加快了查詢速度。
同時(shí),二者也都提供支持XML的各種格式。 除了在顯而易見的軟件價(jià)格上的區(qū)別之外,這兩個(gè)產(chǎn)品還有什么明顯的區(qū)別嗎?在這二者之間你是如何選擇的?讓我們看看這兩個(gè)產(chǎn)品的主要的不同之處,包括發(fā)行費(fèi)用,性能以及它們的安全性。
根本的區(qū)別是它們遵循的基本原則 二者所遵循的基本原則是它們的主要區(qū)別:開放vs保守。 SQL服務(wù)器的狹隘的,保守的存儲(chǔ)引擎與MySQL服務(wù)器的可擴(kuò)展,開放的存儲(chǔ)引擎絕然不同。
雖然你可以使用SQL服務(wù)器的Sybase引擎,但MySQL能夠提供更多種的選擇,如MyISAM, Heap, InnoDB, and Berkeley DB。 MySQL不完全支持陌生的關(guān)鍵詞,所以它比SQL服務(wù)器要少一些相關(guān)的數(shù)據(jù)庫。
同時(shí),MySQL也缺乏一些存儲(chǔ)程序的功能,比如MyISAM引擎聯(lián)支持交換功能。 發(fā)行費(fèi)用:MySQL不全是免費(fèi),但很便宜 當(dāng)提及發(fā)行的費(fèi)用,這兩個(gè)產(chǎn)品采用兩種絕然不同的決策。
對(duì)于SQL服務(wù)器,獲取一個(gè)免費(fèi)的開發(fā)費(fèi)用最常的方式是購買微軟的Office或者Visual Studio的費(fèi)用。但是,如果你想用于商業(yè)產(chǎn)品的開發(fā),你必須還要購買SQL Server Standard Edition。
學(xué)?;蚍勤A利的企業(yè)可以不考慮這一附加的費(fèi)用。 性能:先進(jìn)的MySQL 純粹就性能而言,MySQL是相當(dāng)出色的,因?yàn)樗粋€(gè)缺省桌面格式MyISAM。
MyISAM 數(shù)據(jù)庫與磁盤非常地兼容而不占用過多的CPU和內(nèi)存。MySQL可以運(yùn)行于Windows系統(tǒng)而不會(huì)發(fā)生沖突,在UNIX或類似UNIX系統(tǒng)上運(yùn)行則更好。
你還可以通過使用64位處理器來獲取額外的一些性能。因?yàn)镸ySQL在內(nèi)部里很多時(shí)候都使用64位的整數(shù)處理。
Yahoo!商業(yè)網(wǎng)站就使用MySQL作為后臺(tái)數(shù)據(jù)庫。 當(dāng)提及軟件的性能,SQL服務(wù)器的穩(wěn)定性要比它的競(jìng)爭(zhēng)對(duì)手強(qiáng)很多。
但是,這些特性也要付出代價(jià)的。 比如,必須增加額外復(fù)雜操作,磁盤存儲(chǔ),內(nèi)存損耗等等。
如果你的硬件和軟件不能充分支持SQL服務(wù)器,我建議你最好選擇其他如DBMS數(shù)據(jù)庫,因?yàn)檫@樣你會(huì)得到更好的結(jié)果。 安全功能 MySQL有一個(gè)用于改變數(shù)據(jù)的二進(jìn)制日志。
因?yàn)樗嵌M(jìn)制,這一日志能夠快速地從主機(jī)上復(fù)制數(shù)據(jù)到客戶機(jī)上。 即使服務(wù)器崩潰,這一二進(jìn)制日志也會(huì)保持完整,而且復(fù)制的部分也不會(huì)受到損壞。
在SQL服務(wù)器中,你也可以記錄SQL的有關(guān)查詢,但這需要付出很高的代價(jià)。 安全性 這兩個(gè)產(chǎn)品都有自己完整的安全機(jī)制。
只要你遵循這些安全機(jī)制,一般程序都不會(huì)出現(xiàn)什么問題。 這兩者都使用缺省的IP端口,但是有時(shí)候很不幸,這些IP也會(huì)被一些黑客闖入。
當(dāng)然,你也可以自己設(shè)置這些IP端口。 恢復(fù)性:先進(jìn)的SQL服務(wù)器 恢復(fù)性也是MySQL的一個(gè)特點(diǎn),這主要表現(xiàn)在MyISAM配置中。
這種方式有它固有的缺欠,如果你不慎損壞數(shù)據(jù)庫,結(jié)果可能會(huì)導(dǎo)致所有的數(shù)據(jù)丟失。 然而,對(duì)于SQL服務(wù)器而言就表現(xiàn)得很穩(wěn)鍵。
SQL服務(wù)器能夠時(shí)刻監(jiān)測(cè)數(shù)據(jù)交換點(diǎn)并能夠把數(shù)據(jù)庫損壞的過程保存下來。 根據(jù)需要決定你的選擇 對(duì)于這兩種數(shù)據(jù)庫,如果非要讓我說出到底哪一種更加出色,也許我會(huì)讓你失望。
以我的觀點(diǎn),任一對(duì)你的工作有幫助的數(shù)據(jù)庫都是很好的數(shù)據(jù)庫,沒有哪一個(gè)數(shù)據(jù)庫是絕對(duì)的出色,也沒有哪一個(gè)數(shù)據(jù)庫是絕對(duì)的差勁。 我想要告訴你的是你應(yīng)該多從你自己的需要出發(fā),即你要完成什么樣的任務(wù)?而不要單純地從軟件的功能出發(fā)。
如果你想建立一個(gè)。服務(wù)器體系,這一體系可以從多個(gè)不同平臺(tái)訪問數(shù)據(jù),參與數(shù)據(jù)庫的管理,那么你可以選用SQL服務(wù)器。
如果你想建立一個(gè)第三方站點(diǎn),這一站點(diǎn)可以從一些客戶端讀取數(shù)據(jù),那么MySQL將是最好的選擇。 這兩者數(shù)據(jù)庫都能夠在。
或J2EE下運(yùn)行正常,同樣,都能夠利用RAID。 。
4. mysql中事務(wù)和存儲(chǔ)過程的區(qū)別
存儲(chǔ)過程是:
通過一系列的SQL語句, 根據(jù)傳入的參數(shù)(也可以沒有), 通過簡(jiǎn)單的調(diào)用,
完成比單個(gè)SQL語句更復(fù)雜的功能, 存儲(chǔ)在數(shù)據(jù)庫服務(wù)器端,只需要編譯過一次之后再次使用都不需要再進(jìn)行編譯。主要對(duì)存儲(chǔ)的過程進(jìn)行控制。
事務(wù)是一系列的數(shù)據(jù)更改操作組成的一個(gè)整體。一旦事務(wù)中包含的某操作失敗或用戶中止,用戶可以控制將事務(wù)體中所有操作撤消,返回事務(wù)開始前的狀態(tài)。
事務(wù)中的操作是一個(gè)整體,要么整體完成,要么全部不做。從而保證了數(shù)據(jù)的完整性。
Mysql中,MyISAM存儲(chǔ)引擎不支持事務(wù),InnoDB支持。
兩者都是數(shù)據(jù)庫中非常重要的知識(shí)。
5. 有關(guān)數(shù)據(jù)庫最基本最基礎(chǔ)知識(shí)
一 事務(wù)處理介紹 事務(wù)是這樣一種機(jī)制,它確保多個(gè)SQL語句被當(dāng)作單個(gè)工作單 元來處理。
事務(wù)具有以下的作用: * 一致性:同時(shí)進(jìn)行的查詢和更新彼此不會(huì)發(fā)生沖突,其他 用戶不會(huì)看到發(fā)生了變化但尚未提交的數(shù)據(jù)。 * 可恢復(fù)性:一旦系統(tǒng)故障,數(shù)據(jù)庫會(huì)自動(dòng)地完全恢復(fù)未完 成的事務(wù)。
二 事務(wù)與一致性 事務(wù)是完整性的單位,一個(gè)事務(wù)的執(zhí)行是把數(shù)據(jù)庫從一個(gè)一 致的狀態(tài)轉(zhuǎn)換成另一個(gè)一致的狀態(tài)。因此,如果事務(wù)孤立執(zhí)行時(shí) 是正確的,但如果多個(gè)事務(wù)并發(fā)交錯(cuò)地執(zhí)行,就可能相互干擾, 造成數(shù)據(jù)庫狀態(tài)的不一致。
在多用戶環(huán)境中,數(shù)據(jù)庫必須避免同 時(shí)進(jìn)行的查詢和更新發(fā)生沖突。這一點(diǎn)是很重要的,如果正在被 處理的數(shù)據(jù)能夠在該處理正在運(yùn)行時(shí)被另一用戶的修改所改變, 那么該處理結(jié)果是不明確的。
不加控制的并發(fā)存取會(huì)產(chǎn)生以下幾種錯(cuò)誤: 1 丟失修改(lost updates) 當(dāng)多個(gè)事務(wù)并發(fā)修改一個(gè)數(shù)據(jù)時(shí),不加控制會(huì)得出錯(cuò)誤的結(jié) 果,一個(gè)修改會(huì)覆蓋掉另一個(gè)修改。 2 讀的不可重復(fù)性 當(dāng)多個(gè)事務(wù)按某種時(shí)間順序存取若干數(shù)據(jù)時(shí),如果對(duì)并發(fā)存 取不加控制,也會(huì)產(chǎn)生錯(cuò)誤。
3 臟讀(DIRDY DATA),讀的不一致性 4 光標(biāo)帶來的當(dāng)前值的混亂 事務(wù)在執(zhí)行過程中它在某個(gè)表上的當(dāng)前查找位置是由光標(biāo)表 示的。光標(biāo)指向當(dāng)前正處理的記錄。
當(dāng)處理完該條記錄后,則指 向下一條記錄。在多個(gè)事務(wù)并發(fā)執(zhí)行時(shí),某一事務(wù)的修改可能產(chǎn) 生負(fù)作用,使與這些光標(biāo)有關(guān)的事務(wù)出錯(cuò)。
5 未釋放修改造成連鎖退出 一個(gè)事務(wù)在進(jìn)行修改操作的過程中可能會(huì)發(fā)生故障,這時(shí)需 要將已做的修改回退(Rollback)。如果在已進(jìn)行過或已發(fā)現(xiàn)錯(cuò) 誤尚未復(fù)原之前允許其它事務(wù)讀已做過修改(臟讀),則會(huì)導(dǎo)致 連鎖退出。
6 一事務(wù)在對(duì)一表更新時(shí),另外的事務(wù)卻修改或刪除此表的 定義。 數(shù)據(jù)庫會(huì)為每個(gè)事務(wù)自動(dòng)地設(shè)置適當(dāng)級(jí)別的鎖定。
對(duì)于前面 講述的問題:臟讀、未釋放修改造成的連鎖退出、一事務(wù)在對(duì)一 表更新時(shí)另外的事務(wù)卻修改或刪除此表的定義,數(shù)據(jù)庫都會(huì)自動(dòng) 解決。而另外的三個(gè)問題則需要在編程過程中人為地定義事務(wù)或 加鎖來解決。
三 事務(wù)和恢復(fù) 數(shù)據(jù)庫本身肩負(fù)著管理事務(wù)的責(zé)任。事務(wù)是最小的邏輯工作 單元,在這個(gè)工作單元中,對(duì)數(shù)據(jù)庫的所有更新工作,要么必須 全部成功,要么必須全部失?。ɑ赝耍?/p>
只要應(yīng)用程序指定了某 段程序?yàn)橐粋€(gè)事務(wù)并做了相應(yīng)的處理(提交或回退),數(shù)據(jù)庫系 統(tǒng)會(huì)自動(dòng)維護(hù)事務(wù)本身的特性。 四 ORACLE數(shù)據(jù)庫的事務(wù)定義 ORACLE事務(wù)從MIT、ROLLBACK、連接到數(shù)據(jù)庫或開始第一 條可執(zhí)行的SQL語句時(shí)開始,到一條MIT、ROLLBACK語句或退出 數(shù)據(jù)庫時(shí)結(jié)束。
如果在一個(gè)事務(wù)中包含DDL語句,則在DDL語句的 前后都會(huì)隱含地執(zhí)行MIT語句,從而開始或結(jié)束一個(gè)事務(wù)。 如果一個(gè)事務(wù)由于某些故障或者由于用戶改變主意而必須在 提交前取消它,則數(shù)據(jù)庫被恢復(fù)到這些語句和過程執(zhí)行之前的狀 態(tài)。
利用ROLLBACK語句可以在MIT命令前隨時(shí)撤消或回退一個(gè) 事務(wù)??梢曰赝苏麄€(gè)事務(wù),也可以會(huì)退部分事務(wù),但是不能回退 一個(gè)已經(jīng)被提交的事務(wù)。
回退部分事務(wù)的ROLLBACK命令為: ROLLBACK to savepoint 存儲(chǔ)點(diǎn)名 存儲(chǔ)點(diǎn)是用戶放入事務(wù)中的標(biāo)記,用來表示一個(gè)可被回退的 位置。存儲(chǔ)點(diǎn)通過在事務(wù)中放入一個(gè)SAVEPOINT命令而 *** 入。
該 命令的語法是: SAVEPOINT 存儲(chǔ)點(diǎn)名 如果在ROLLBACK語句中沒有給出存儲(chǔ)點(diǎn)名,則整個(gè)事務(wù)被回 退。 五 SYBASE數(shù)據(jù)庫的事務(wù)定義 SYBASE通過使用BEGIN TRANsaction和MIT TRANsaction命令指 示SQL將任意數(shù)目的語句作為一個(gè)單元來處理。
ROLLBACK TRANsaction 命令則允許用戶恢復(fù)到事務(wù)的開始,或恢復(fù)到事務(wù)內(nèi)部已經(jīng)被用SAVE TRANsaction命令定義的存儲(chǔ)點(diǎn)上。 BEGIN TRANsaction和MIT TRANsaction能夠包含任意數(shù)目的SQL 語句和存儲(chǔ)過程,方法很簡(jiǎn)單: BEGIN TRANsaction [事務(wù)名稱] MIT TRANsaction 如果一個(gè)事務(wù)由于某些故障或者由于用戶改變主意而必須在提交 前取消它,則數(shù)據(jù)庫被恢復(fù)到這些語句和過程執(zhí)行之前的狀態(tài)。
利用ROLLBACK TRANsaction命令可以在MIT TRANsaction命令 前隨時(shí)回退一個(gè)事務(wù)。可以回退整個(gè)事務(wù),也可以回退部分事務(wù),但 是不能回退一個(gè)已經(jīng)被提交的事務(wù)。
ROLLBACK TRANsaction命令為: ROLLBACK TRANsaction [事務(wù)名|存儲(chǔ)點(diǎn)名] 存儲(chǔ)點(diǎn)名是用戶放入事務(wù)中的標(biāo)記,用來表示一個(gè)可以被回退的 位置。存儲(chǔ)點(diǎn)名通過在事務(wù)中放入一個(gè)SAVE TRANsaction命令而 *** 入。
該命令的句法是: SAVE TRANsaction 存儲(chǔ)點(diǎn)名 如果在ROLLBACK TRANsaction中沒有給出存儲(chǔ)點(diǎn)名或事務(wù)名,則 事務(wù)被回退到批處理中的第一個(gè)BEGIN TRANsaction語句處。
1.查看表被鎖狀態(tài)
2.查看造成死鎖的sql語句
3.查詢進(jìn)程
4.解鎖(刪除進(jìn)程)
5.查看正在鎖的事物? (8.0以下版本)
6.查看等待鎖的事物?(8.0以下版本)
可直接在mysql命令行執(zhí)行:show engine innodb status\G;
查看造成死鎖的sql語句,分析索引情況,然后優(yōu)化sql然后show processlist;
show status like ‘%lock%’
show OPEN TABLES where In_use 0; 這個(gè)語句記錄當(dāng)前鎖表狀態(tài)
另外可以打開慢查詢?nèi)罩荆琹inux下打開需在my.cnf的[mysqld]里面加上以下內(nèi)容:
slow_query_log=TRUE(有些mysql版本是ON)
slow_query_log_file=/usr/local/mysql/slow_query_log.txt
long_query_time=3
擴(kuò)展資料:
MySQL鎖定狀態(tài)查看命令
Checking table:正在檢查數(shù)據(jù)表(這是自動(dòng)的)。?
Closing tables:正在將表中修改的數(shù)據(jù)刷新到磁盤中,同時(shí)正在關(guān)閉已經(jīng)用完的表。這是一個(gè)很快的操作,如果不是這樣的話,就應(yīng)該確認(rèn)磁盤空間是否已經(jīng)滿了或者磁盤是否正處于重負(fù)中。
Connect Out:復(fù)制從服務(wù)器正在連接主服務(wù)器。?
Copying to tmp table on disk:由于臨時(shí)結(jié)果集大于tmp_table_size,正在將臨時(shí)表從內(nèi)存存儲(chǔ)轉(zhuǎn)為磁盤存儲(chǔ)以此節(jié)省內(nèi)存。
Creating tmp table:正在創(chuàng)建臨時(shí)表以存放部分查詢結(jié)果。
deleting from main table:服務(wù)器正在執(zhí)行多表刪除中的第一部分,剛刪除第一個(gè)表。
MYSQL事務(wù)處理失效原因
最近項(xiàng)目中使用mysql數(shù)據(jù)庫時(shí)出現(xiàn)一個(gè)問題,運(yùn)用spring的事務(wù)注解(@transaction)來管理事務(wù)時(shí),發(fā)現(xiàn)用事務(wù)注解@transaction標(biāo)記的方法里,如果出現(xiàn)異常,事務(wù)并沒有回滾,而是直接提交到了數(shù)據(jù)庫,剛開始還以為是spring的事務(wù)配置有問題,檢查一遍后還是不行,最后查閱了很多資料才發(fā)現(xiàn)原來是mysql數(shù)據(jù)庫存儲(chǔ)引擎的問題。
mysql有多種存儲(chǔ)引擎,有些版本(mysql5.5.5以前默認(rèn)是MyISAM,mysql5.5.5以后默認(rèn)是InnoDB)安裝時(shí)默認(rèn)的存儲(chǔ)引擎是MyISAM,而MyISAM存儲(chǔ)引擎是不支持事務(wù)處理的,所以才導(dǎo)致了項(xiàng)目中service層的某個(gè)方法事務(wù)失效,解決的方法就是將需要事務(wù)管理的表的存儲(chǔ)引擎改為InnoDB,下面將詳細(xì)說明mysql的幾種存儲(chǔ)引擎以及如何修改存儲(chǔ)引擎:
一、查看mysql數(shù)據(jù)庫所支持的存儲(chǔ)引擎
show ENGINES;
該語句將列出該版本的mysql所支持的所有存儲(chǔ)引擎,并且可看到默認(rèn)的存儲(chǔ)引擎為InnoDB(這個(gè)是我修改之后的,剛安裝mysql完默認(rèn)的是MyISAM),也可以使用下面語句來查看mysql默認(rèn)的存儲(chǔ)引擎:
SHOW VARIABLES LIKE 'storage_engine';
二、MyISAM存儲(chǔ)引擎
MyISAM基于ISAM存儲(chǔ)引擎,并對(duì)其進(jìn)行擴(kuò)展。它是在Web、數(shù)據(jù)倉儲(chǔ)和其他應(yīng)用環(huán)境下最常使用的存儲(chǔ)引擎之一。MyISAM擁有較高的插入、查詢速度,但不支持事務(wù)。MyISAM主要特性有:
1、大文件(達(dá)到63位文件長(zhǎng)度)在支持大文件的文件系統(tǒng)和操作系統(tǒng)上被支持
2、當(dāng)把刪除和更新及插入操作混合使用的時(shí)候,動(dòng)態(tài)尺寸的行產(chǎn)生更少碎片。這要通過合并相鄰被刪除的塊,以及若下一個(gè)塊被刪除,就擴(kuò)展到下一塊自動(dòng)完成
3、每個(gè)MyISAM表最大索引數(shù)是64,這可以通過重新編譯來改變。每個(gè)索引最大的列數(shù)是16
4、最大的鍵長(zhǎng)度是1000字節(jié),這也可以通過編譯來改變,對(duì)于鍵長(zhǎng)度超過250字節(jié)的情況,一個(gè)超過1024字節(jié)的鍵將被用上
5、BLOB和TEXT列可以被索引
6、NULL被允許在索引的列中,這個(gè)值占每個(gè)鍵的0~1個(gè)字節(jié)
7、所有數(shù)字鍵值以高字節(jié)優(yōu)先被存儲(chǔ)以允許一個(gè)更高的索引壓縮
8、每個(gè)MyISAM類型的表都有一個(gè)AUTO_INCREMENT的內(nèi)部列,當(dāng)INSERT和UPDATE操作的時(shí)候該列被更新,同時(shí)AUTO_INCREMENT列將被刷新。所以說,MyISAM類 型表的AUTO_INCREMENT列更新比InnoDB類型的AUTO_INCREMENT更快
9、可以把數(shù)據(jù)文件和索引文件放在不同目錄
10、每個(gè)字符列可以有不同的字符集
11、有VARCHAR的表可以固定或動(dòng)態(tài)記錄長(zhǎng)度
12、VARCHAR和CHAR列可以多達(dá)64KB
使用MyISAM引擎創(chuàng)建數(shù)據(jù)庫,將產(chǎn)生3個(gè)文件。文件的名字以表名字開始,擴(kuò)展名之處文件類型:frm文件存儲(chǔ)表定義、數(shù)據(jù)文件的擴(kuò)展名為.MYD(MYData)、索引文件的擴(kuò)展名時(shí).MYI(MYIndex)
三、InnoDB存儲(chǔ)引擎
InnoDB是事務(wù)型數(shù)據(jù)庫的首選引擎,支持事務(wù)安全表(ACID),支持行鎖定和外鍵,上圖也看到了,InnoDB是默認(rèn)的MySQL引擎。InnoDB主要特性有:
1、InnoDB給MySQL提供了具有提交、回滾和崩潰恢復(fù)能力的事物安全(ACID兼容)存儲(chǔ)引擎。InnoDB鎖定在行級(jí)并且也在SELECT語句中提供一個(gè)類似Oracle的非鎖定讀。這些功能增加了多用戶部署和性能。在SQL查詢中,可以自由地將InnoDB類型的表和其他MySQL的表類型混合起來,甚至在同一個(gè)查詢中也可以混合
2、InnoDB是為處理巨大數(shù)據(jù)量的最大性能設(shè)計(jì)。它的CPU效率可能是任何其他基于磁盤的關(guān)系型數(shù)據(jù)庫引擎鎖不能匹敵的
3、InnoDB存儲(chǔ)引擎完全與MySQL服務(wù)器整合,InnoDB存儲(chǔ)引擎為在主內(nèi)存中緩存數(shù)據(jù)和索引而維持它自己的緩沖池。InnoDB將它的表和索引在一個(gè)邏輯表空間中,表空間可以包含數(shù)個(gè)文件(或原始磁盤文件)。這與MyISAM表不同,比如在MyISAM表中每個(gè)表被存放在分離的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統(tǒng)上
4、InnoDB支持外鍵完整性約束,存儲(chǔ)表中的數(shù)據(jù)時(shí),每張表的存儲(chǔ)都按主鍵順序存放,如果沒有顯示在表定義時(shí)指定主鍵,InnoDB會(huì)為每一行生成一個(gè)6字節(jié)的ROWID,并以此作為主鍵
5、InnoDB被用在眾多需要高性能的大型數(shù)據(jù)庫站點(diǎn)上
InnoDB不創(chuàng)建目錄,使用InnoDB時(shí),MySQL將在MySQL數(shù)據(jù)目錄下創(chuàng)建一個(gè)名為ibdata1的10MB大小的自動(dòng)擴(kuò)展數(shù)據(jù)文件,以及兩個(gè)名為ib_logfile0和ib_logfile1的5MB大小的日志文件
四、MEMORY存儲(chǔ)引擎
MEMORY存儲(chǔ)引擎將表中的數(shù)據(jù)存儲(chǔ)到內(nèi)存中,未查詢和引用其他表數(shù)據(jù)提供快速訪問。MEMORY主要特性有:
1、MEMORY表的每個(gè)表可以有多達(dá)32個(gè)索引,每個(gè)索引16列,以及500字節(jié)的最大鍵長(zhǎng)度
2、MEMORY存儲(chǔ)引擎執(zhí)行HASH和BTREE縮影
3、可以在一個(gè)MEMORY表中有非唯一鍵值
4、MEMORY表使用一個(gè)固定的記錄長(zhǎng)度格式
5、MEMORY不支持BLOB或TEXT列
6、MEMORY支持AUTO_INCREMENT列和對(duì)可包含NULL值的列的索引
7、MEMORY表在所由客戶端之間共享(就像其他任何非TEMPORARY表)
8、MEMORY表內(nèi)存被存儲(chǔ)在內(nèi)存中,內(nèi)存是MEMORY表和服務(wù)器在查詢處理時(shí)的空閑中,創(chuàng)建的內(nèi)部表共享
9、當(dāng)不再需要MEMORY表的內(nèi)容時(shí),要釋放被MEMORY表使用的內(nèi)存,應(yīng)該執(zhí)行DELETE FROM或TRUNCATE TABLE,或者刪除整個(gè)表(使用DROP TABLE)
五、存儲(chǔ)引擎的選擇
不同的存儲(chǔ)引擎都有各自的特點(diǎn),以適應(yīng)不同的需求,如下表所示:
功? 能 ? ?MYISAM ? ?Memory ? ?InnoDB ? ?Archive ?
存儲(chǔ)限制 ? ?256TB ? ?RAM ? ?64TB ? ?None ?
支持事物 ? ?No ? ?No ? ?Yes ? ?No ?
支持全文索引 ? ?Yes ? ?No ? ?No ? ?No ?
支持?jǐn)?shù)索引 ? ?Yes ? ?Yes ? ?Yes ? ?No ?
支持哈希索引 ? ?No ? ?Yes ? ?No ? ?No ?
支持?jǐn)?shù)據(jù)緩存 ? ?No ? ?N/A ? ?Yes ? ?No ?
支持外鍵 ? ?No ? ?No ? ?Yes ? ?No ?
如果要提供提交、回滾、崩潰恢復(fù)能力的事物安全(ACID兼容)能力,并要求實(shí)現(xiàn)并發(fā)控制,InnoDB是一個(gè)好的選擇
如果數(shù)據(jù)表主要用來插入和查詢記錄,則MyISAM引擎能提供較高的處理效率
如果只是臨時(shí)存放數(shù)據(jù),數(shù)據(jù)量不大,并且不需要較高的數(shù)據(jù)安全性,可以選擇將數(shù)據(jù)保存在內(nèi)存中的Memory引擎,MySQL中使用該引擎作為臨時(shí)表,存放查詢的中間結(jié)果
如果只有INSERT和SELECT操作,可以選擇Archive,Archive支持高并發(fā)的插入操作,但是本身不是事務(wù)安全的。Archive非常適合存儲(chǔ)歸檔數(shù)據(jù),如記錄日志信息可以使用Archive
使用哪一種引擎需要靈活選擇,一個(gè)數(shù)據(jù)庫中多個(gè)表可以使用不同引擎以滿足各種性能和實(shí)際需求,使用合適的存儲(chǔ)引擎,將會(huì)提高整個(gè)數(shù)據(jù)庫的性能
六、修改存儲(chǔ)引擎
1、修改mysql默認(rèn)存儲(chǔ)引擎為InnoDB
關(guān)閉mysql服務(wù): net stop mysql
找到mysql安裝目錄下的my.ini文件:
找到default-storage-engine=MYISAM?改為default-storage-engine=INNODB
找到skip-innodb 改為#skip-innodb,即注釋掉該行,skip-innodb為忽略InnoDB的意思,此處需要開啟InnoDB,故需要把它注釋
啟動(dòng)mysql服務(wù):net start mysql
2、查看表使用的存儲(chǔ)引擎
show table status from db_name where name='table_name';
3、修改表的存儲(chǔ)引擎
alter table table_name engine=innodb;