溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中的事務(wù)處理和數(shù)據(jù)備份恢復(fù)方法

發(fā)布時(shí)間:2021-09-16 16:26:11 來源:億速云 閱讀:97 作者:chen 欄目:MySQL數(shù)據(jù)庫

這篇文章主要講解了“MySQL中的事務(wù)處理和數(shù)據(jù)備份恢復(fù)方法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“MySQL中的事務(wù)處理和數(shù)據(jù)備份恢復(fù)方法”吧!

目錄:
1、事務(wù)
2、備份和還原

1、事務(wù):

轉(zhuǎn)賬:  A賬戶   轉(zhuǎn)100–》B賬戶
sql:
1、A賬戶-100;
2、B賬戶+100;
如果1和2都完成了,那么我們說這樣轉(zhuǎn)賬過程就完成。

一旦1和2兩個(gè)步驟,有一步?jīng)]有完成,那么我們說轉(zhuǎn)成失敗!

怎么辦?
要把已經(jīng)完成的那部分,回滾(撤銷),消除影響。

在mysql中,有沒有這樣的功能呢?
答案是有!?。?用事務(wù)!

事務(wù)一組sql的集合,要么全部都執(zhí)行成功,要么全部都不執(zhí)行(已經(jīng)執(zhí)行的sql要回滾),把狀態(tài)退回到sql執(zhí)行之前。

語法:
開啟事務(wù):
start transaction;
把sql的執(zhí)行結(jié)果暫存。

提交:
commit 
如果所有的sql都執(zhí)行成功,則提交。將sql的執(zhí)行結(jié)果 持久化 到數(shù)據(jù)庫中

回滾:
rollback
如果有執(zhí)行失敗的sql,則需要回滾。將狀態(tài)退回到事務(wù)開始之前。

持久化:將數(shù)據(jù)寫入到數(shù)據(jù)庫中。

無論 commit還是rollback,都會(huì)關(guān)閉事務(wù)。(需要使用事務(wù),還要再開啟)

事務(wù),在沒有commit之前,是沒有持久化到數(shù)據(jù)的。所以,其他連接是看不到數(shù)據(jù)變化的。事務(wù),只針對當(dāng)前的鏈接生效。                                                                                                      

MySQL中的事務(wù)處理和數(shù)據(jù)備份恢復(fù)方法然而另外的連接中,看不到數(shù)據(jù)更新。

MySQL中的事務(wù)處理和數(shù)據(jù)備份恢復(fù)方法












rollback后,之前的sql產(chǎn)生的影響,都被消除。
MySQL中的事務(wù)處理和數(shù)據(jù)備份恢復(fù)方法

之前沒有用事務(wù)的時(shí)候,單條sql,一執(zhí)行,馬上會(huì)持久化到數(shù)據(jù)庫。
為什么:
大家想一下,開啟了事務(wù),我們提交后才能持久化到數(shù)據(jù)庫。也就說,沒有用過事務(wù)的時(shí)候,提交是自動(dòng)的。

自動(dòng)提交能不能關(guān)閉呢?
可以?。?!
我們只要把自動(dòng)提交的變量設(shè)置成0(把自動(dòng)提交關(guān)閉)
set autocommit = 0

這個(gè)時(shí)候,不用開啟事務(wù),每次都要手動(dòng)提交,才能持久化到數(shù)據(jù)庫。
注意:commit后,不能自動(dòng)關(guān)閉。
記得要set autocommit=1 開啟自動(dòng)提交

注意:事務(wù)和外鍵一樣,只能在存儲(chǔ)引擎為innodb時(shí)才能使用。














2、數(shù)據(jù)的備份和還原
         1. 簡單的數(shù)據(jù)備份(單表備份)
通過select語句,將查詢數(shù)據(jù),寫入到一個(gè)文件中,存儲(chǔ)起來。
格式:
select 字段列表 into outfile “文件路徑” from 表名;

如:
SQL> select * into outfile 'D:/wamp/www/php1510/0113/bak.sql' from goods;

此時(shí),文件bak.sql中寫入了應(yīng)該在屏幕上顯示的數(shù)據(jù),每個(gè)字段用制表符分隔,每行用換行符。但是,可以定義。字段之間用,來分隔。
如:
SQL> select * into outfile 'D:/wamp/www/php1510/0113/bak2.sql' fields terminated by "," lines terminated by '\r\n' from goods;

簡單備份的還原:(亂碼問題)
# load data infile “D:/wamp/www/php1510/0113/bak.sql” into table copy_goods

2. 用數(shù)據(jù)導(dǎo)出工具,mysqldump  到出的是sql語句。
在D:\wamp\bin\mysql\mysql5.5.24\bin下面有個(gè)mysqldump.exe的工具。這個(gè)不是sql,在cmd中使用。

格式:
mysqldump 數(shù)據(jù)庫服務(wù)器地址 端口 用戶名 密碼 -B 庫名 > 備份文件
如果有-B,則sql中有創(chuàng)建庫的sql語句

箭頭:>   輸出重定向

備份一個(gè)庫:
# mysqldump -hlocalhost -P3306 -uroot -p zm0109 > D:/wamp/www/php1510/0113/zm0109.sql

備份庫下的某些表:
格式:
mysqldump 數(shù)據(jù)庫服務(wù)器地址 端口 用戶名 密碼 -B 庫名  表名 > 備份文件
# mysqldump -hlocalhost -P3306 -uroot -p zm0109 goods student > D:/wamp/www/php1510/0113/zm01093.sql

還原數(shù)據(jù):
1.在登錄mysql客戶端的情況下進(jìn)行還原:
source sql文件
SQL> source D:/wamp/www/php1510/0113/zm01093.sql

2、在未登錄mysql客戶端的情況下進(jìn)行還原:
# mysql -uroot -p zm3 <d: wamp="" www="" php1510="" 0113="" zm01093.sql 箭頭:<  輸入重定向

感謝各位的閱讀,以上就是“MySQL中的事務(wù)處理和數(shù)據(jù)備份恢復(fù)方法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對MySQL中的事務(wù)處理和數(shù)據(jù)備份恢復(fù)方法這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI