1、首先檢查是否已安裝MySQL服務(wù),如果沒(méi)有安裝,則需要安裝MySQL服務(wù)。
成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)泉山,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
2、然后檢查MySQL服務(wù)是否已經(jīng)在系統(tǒng)服務(wù)列表中,如果不在則需要手動(dòng)添加MySQL服務(wù)。
3、檢查MySQL的配置文件my.ini是否正確,如果不正確則需要修改配置文件。
4、檢查Windows服務(wù)管理器中MySQL服務(wù)的狀態(tài)是否處于“運(yùn)行”狀態(tài),如果不是,則需要手動(dòng)啟動(dòng)MySQL服務(wù)。
拓展:
如果以上步驟都無(wú)法解決問(wèn)題,可以嘗試更新MySQL安裝包,或者重新安裝MySQL服務(wù)。如果仍然無(wú)法解決,則可以嘗試檢查MySQL的數(shù)據(jù)庫(kù)文件是否損壞,如果損壞則需要進(jìn)行修復(fù)。
方法一: 通過(guò)增加參數(shù) –default-character-set = utf8 解決亂碼問(wèn)題
mysql -u root -p password path_to_import_file –default-character-set = utf8
方法二: 在命令行導(dǎo)入亂碼解決
1. use database_name;
2. set names utf8; (或其他需要的編碼)
3. source example.sql (sql文件存放路徑)
方法三: 直接粘貼sql文件里的代碼
1. 打開(kāi)SQLyog客戶端軟件;
2. 定位到SQL編輯器,然后用記事本打開(kāi)剛剛導(dǎo)出的SQL文件;
3. 復(fù)制文件中所有SQL語(yǔ)句到SQL編輯器當(dāng)中,執(zhí)行這些SQL代碼;
方法四: 用記事本或其他文本工具改變SQL文件的編碼格式(若方法三不行,那就嘗試方法四)
1. 用記事本(或UE)打開(kāi)剛才的導(dǎo)出的SQL文件;
2. 另存此文件——打開(kāi)另存為對(duì)話框,選擇對(duì)話框中的編碼格式為UNICODE編碼;
3. 保存文件,然后CTRL+A,全選;
4. 復(fù)制里面的SQL語(yǔ)句到SQLyog中的“SQL編碼器”當(dāng)中,再執(zhí)行一次SQL語(yǔ)句;
5. 執(zhí)行完成后切記刷新一次,查看中文的數(shù)據(jù)表,亂碼消除,大功告成;
今天我們來(lái)看看多個(gè)事務(wù)對(duì)緩存頁(yè)里的同一條數(shù)據(jù)同時(shí)進(jìn)行更新或者查詢,此時(shí)會(huì)產(chǎn)生哪些問(wèn)題?這里實(shí)際會(huì)涉及到 臟寫(xiě)、臟讀、不可重復(fù)讀、幻讀, 四中問(wèn)題。
這個(gè)臟寫(xiě)的話,它的意思是說(shuō)有兩個(gè)事務(wù),事務(wù)A和事務(wù)B同時(shí)在更新一條數(shù)據(jù),事務(wù)A先把它更新為A值,事務(wù)B緊接著就把它更新為B值。事務(wù)A是先更新的,它在更新之前,這行數(shù)據(jù)的值為NULL,所以此時(shí)事務(wù)A的undo log日志大概是這樣的:更新之前這行數(shù)據(jù)的值為NULL,主鍵為XX 。
那么此時(shí)事務(wù)B更新完了數(shù)據(jù)的值為B,結(jié)果此時(shí)事務(wù)A突然回滾了,那么就會(huì)用它的undo log日志去回滾。此時(shí)事務(wù)A一回滾,直接就會(huì)把那行數(shù)據(jù)的值更新回之前的NULL值。所以對(duì)于事務(wù)B看到的場(chǎng)景,就是自己明明更新了,結(jié)果值卻沒(méi)了,這就是 臟寫(xiě)。
假設(shè)事務(wù)A更新了一行數(shù)據(jù)的值為A,此時(shí)事務(wù)B去查詢了一些這行數(shù)據(jù)的值,看到的值是A,然后事務(wù)B拿著剛查詢到的A值去處理各種業(yè)務(wù)。但是此時(shí)不幸的事情發(fā)生了,事務(wù)A突然回滾了,導(dǎo)致它剛才更新的A值沒(méi)了,此時(shí)那行數(shù)據(jù)的值回滾為NULL值。這就是所謂的 臟讀。 它的本質(zhì)是事務(wù)B去查詢了事務(wù)A修改過(guò)的數(shù)據(jù),但是此時(shí)事務(wù)A還沒(méi)有提交,事務(wù)A隨時(shí)會(huì)回滾導(dǎo)致事務(wù)B查詢了一個(gè)不存在的值。
接著我們來(lái)看一下 的問(wèn)題,假設(shè)我們有一個(gè)事務(wù)A開(kāi)啟了,在這個(gè)事務(wù)A里會(huì)多次對(duì)一條數(shù)據(jù)進(jìn)行查詢。然后另外有兩個(gè)事務(wù),一個(gè)是事務(wù)B,一個(gè)是事務(wù)C,它們都是對(duì)一條數(shù)據(jù)進(jìn)行更新的。假設(shè)緩存頁(yè)里一條數(shù)據(jù)原來(lái)的值是A值,此時(shí)事務(wù)A開(kāi)啟之后,第一次查詢這條數(shù)據(jù),讀取到的是A值。接著事務(wù)B更新了那行數(shù)據(jù)的值為B,同時(shí)提交事務(wù),然后事務(wù)A第二次查詢?cè)撔袛?shù)據(jù),此時(shí)查到的是事務(wù)B修改過(guò)的值B 。接著事務(wù)C更新了那行數(shù)據(jù)的值為C,同時(shí)提交事務(wù),然后事務(wù)A第三次查詢?cè)撔袛?shù)據(jù),此時(shí)查到的是事務(wù)C修改過(guò)的值C值。
那么上面的場(chǎng)景有什么問(wèn)題呢?其實(shí)要說(shuō)沒(méi)問(wèn)題也是可以的,畢竟事務(wù)B和C都提交事務(wù)了。但是要說(shuō)有問(wèn)題也是可以的,就是事務(wù)A可能第一次查詢到的是A值,那么它可能希望的是在事務(wù)執(zhí)行期間,如果多次查詢數(shù)據(jù),都是同樣的一個(gè)A值。但是該場(chǎng)景下,A值明顯不是可重復(fù)讀的。
這種情況算不算一個(gè)問(wèn)題呢?其實(shí)這是根據(jù)你的業(yè)務(wù)決定的。有的業(yè)務(wù)要的是可重復(fù)讀,而有的業(yè)務(wù)卻需要不可重復(fù)讀。
假設(shè)一個(gè)事務(wù)A先發(fā)送一條SQL語(yǔ)句,里面有一個(gè)條件,要查詢一批數(shù)據(jù)出來(lái),比如“select * from table where id 10”,類似這種SQL,它一開(kāi)始查詢出了10條數(shù)據(jù)。然后事務(wù)B往表里插入了幾條數(shù)據(jù),而且事務(wù)B還提交了。此時(shí)事務(wù)A再次查詢,由于事務(wù)B插入了幾條數(shù)據(jù),導(dǎo)致這次它查詢出來(lái)了12條數(shù)據(jù)。同樣的SQL語(yǔ)句,兩次的查詢結(jié)果卻不一樣,所以開(kāi)始懷疑自己是不是出現(xiàn)了幻覺(jué)?導(dǎo)致剛才幻讀了?這就是幻讀一詞的由來(lái)。
在SQL標(biāo)準(zhǔn)中規(guī)定了4種事務(wù)隔離級(jí)別,就是說(shuō)多個(gè)事務(wù)并發(fā)運(yùn)行的時(shí)候,互相是如何隔離的,從而避免一些事務(wù)并發(fā)問(wèn)題。這4種級(jí)別包括了: read uncommitted(讀未提交)、read committed(讀已提交)、repeatable read(可重復(fù)讀)、serializable(串行化) 。
第一個(gè)read uncommitted隔離級(jí)別是不允許發(fā)生臟寫(xiě)的。也就是說(shuō),不可能兩個(gè)事務(wù)在沒(méi)提交的情況下去更新同一行數(shù)據(jù)的值,但是在這種隔離級(jí)別下,可能發(fā)生臟讀、不可重復(fù)讀、幻讀。所以一般來(lái)說(shuō),是沒(méi)有人做系統(tǒng)開(kāi)發(fā)的時(shí)候把事務(wù)隔離級(jí)別設(shè)置為讀未提交這個(gè)級(jí)別的。
第二個(gè)是read committed隔離級(jí)別,也就是俗稱的RC級(jí)別,這個(gè)級(jí)別不會(huì)發(fā)生臟寫(xiě)和臟讀。也就是說(shuō),別的事務(wù)沒(méi)提交的情況下修改的值,你是絕對(duì)讀不到的。但是,可能會(huì)發(fā)生不可重復(fù)讀和幻讀問(wèn)題。
第三個(gè)是repeatable read隔離級(jí)別,也就是俗稱的RR級(jí)別,就是可重復(fù)讀級(jí)別。這個(gè)級(jí)別下,不會(huì)發(fā)生臟寫(xiě)、臟讀、不可重復(fù)讀的問(wèn)題。事務(wù)一旦開(kāi)啟,多次查詢一個(gè)值,會(huì)一直讀到同一個(gè)值。但是它會(huì)發(fā)生幻讀的問(wèn)題。
最后一個(gè)隔離級(jí)別,就是serializable級(jí)別,這種級(jí)別,根本不允許多個(gè)事務(wù)并發(fā)執(zhí)行,只能串行執(zhí)行,所以不可能有幻讀問(wèn)題。但是這種級(jí)別一般除非腦子壞了,否則不可能設(shè)置這種級(jí)別。
MySQL默認(rèn)設(shè)置的事務(wù)隔離級(jí)別都是RR級(jí)別的,而且MySQL的RR級(jí)別是可以避免幻讀發(fā)生的。
下面的命令可以修改MySQL的默認(rèn)事務(wù)隔離級(jí)別:
另外,給大家一個(gè)彩蛋,假設(shè)你在開(kāi)發(fā)業(yè)務(wù)系統(tǒng)的時(shí)候,比如用spring里的@Transaction注解來(lái)做事務(wù)這塊,假設(shè)某個(gè)事務(wù)你就是有點(diǎn)手癢,想搞成RC級(jí)別,那么沒(méi)問(wèn)題,在@Transaction注解里是有一個(gè)isolation參數(shù)的,里面是可以設(shè)置事務(wù)隔離級(jí)別的,具體的設(shè)置方式如下:
@Transaction(isolation=Isolation.DEFAULT),默認(rèn)的就是DEFAULT值,這個(gè)就是MySQL默認(rèn)支持什么隔離就是什么隔離級(jí)別。但是你可以手動(dòng)改成其它的隔離級(jí)別,比如,isolation = Isolation.READ_COMMITTED級(jí)別,此時(shí)你就可以讀取到其它事務(wù)已提交的數(shù)據(jù)。
簡(jiǎn)單來(lái)說(shuō),我們每條數(shù)據(jù)其實(shí)都有兩個(gè)隱藏字段,一個(gè)是trx_id,一個(gè)是roll_pointer,這個(gè)trx_id就是最近一次更新這條數(shù)據(jù)的事務(wù)id,roll_pointer就是指向了你更新這個(gè)事務(wù)之前生成的undo log,關(guān)于undo log之前都講過(guò)了。
舉個(gè)例子,假設(shè)有一個(gè)事務(wù)A(id=50),插入了一條數(shù)據(jù),那么此時(shí)這條數(shù)據(jù)的隱藏字段以及指向的undo log如下圖所示:
插入的這條數(shù)據(jù)的值是A,因?yàn)槭聞?wù)A的id是50,所以這條數(shù)據(jù)的trx_id就是50,roll_pointer指向一個(gè)空的undo log,因?yàn)橹斑@條數(shù)據(jù)是沒(méi)有的。接著有一個(gè)事務(wù)B修改了一下這條數(shù)據(jù),把值改成了B,事務(wù)B的id是58,那么此時(shí)更新之前會(huì)生成一個(gè)undo log記錄之前的值,然后會(huì)讓roll_pointer指向這個(gè)實(shí)際的undo log回滾日志,如下圖所示:
3). 幻讀 :
是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如第一個(gè)事務(wù)對(duì)一個(gè)表中的數(shù)據(jù)進(jìn)行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后就會(huì)發(fā)生操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還有沒(méi)有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺(jué)一樣。例如,一個(gè)編輯人員更改作者提交的文檔,但當(dāng)生產(chǎn)部門(mén)將其更改內(nèi)容合并到該文檔的主復(fù)本時(shí),發(fā)現(xiàn)作者已將未編輯的新材料添加到該文檔中。如果在編輯人員和生產(chǎn)部門(mén)完成對(duì)原始文檔的處理之前,任何人都不能將新材料添加到文檔中,則可以避免該問(wèn)題。
網(wǎng)站名稱:mysql臟寫(xiě)怎么解決 mysql臟讀是什么意思
當(dāng)前路徑:http://chinadenli.net/article12/ddeiggc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)公司、服務(wù)器托管、做網(wǎng)站、網(wǎng)站內(nèi)鏈、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
營(yíng)銷(xiāo)型網(wǎng)站建設(shè)知識(shí)