mysql事物 总结_Mysql事务总结
數(shù)據(jù)庫 事務(wù)的特性ACID 事務(wù)(Transaction)是并發(fā)控制的基本單位。 所謂事務(wù),它是一個操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行,它是一個不可分割的工作單位。例如,銀行轉(zhuǎn)帳工作:從一個帳號扣款并使另一個帳號增款,這兩個操作要么都執(zhí)行,要么都不執(zhí)
數(shù)據(jù)庫 事務(wù)的特性ACID
事務(wù)(Transaction)是并發(fā)控制的基本單位。
所謂事務(wù),它是一個操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行,它是一個不可分割的工作單位。例如,銀行轉(zhuǎn)帳工作:從一個帳號扣款并使另一個帳號增款,這兩個操作要么都執(zhí)行,要么都不執(zhí)行。
數(shù)據(jù)庫事務(wù)必須具備ACID特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔離性)和Durability(持久性)的英文縮寫。
原子性:指整個數(shù)據(jù)庫事務(wù)是不可分割的工作單位。只有使據(jù)庫中所有的操作執(zhí)行成功,才算整個事務(wù)成功;事務(wù)中任何一個SQL語句執(zhí)行失敗,那么已經(jīng)執(zhí)行成功的SQL語句也必須撤銷,數(shù)據(jù)庫狀態(tài)應(yīng)該退回到執(zhí)行事務(wù)前的狀態(tài)。
一致性:指數(shù)據(jù)庫事務(wù)不能破壞關(guān)系數(shù)據(jù)的完整性以及業(yè)務(wù)邏輯上的一致性。例如對銀行轉(zhuǎn)帳事務(wù),不管事務(wù)成功還是失敗,應(yīng)該保證事務(wù)結(jié)束后ACCOUNTS表中Tom和Jack的存款總額為2000元。
隔離性:指的是在并發(fā)環(huán)境中,當(dāng)不同的事務(wù)同時操縱相同的數(shù)據(jù)時,每個事務(wù)都有各自的完整數(shù)據(jù)空間。由并發(fā)事務(wù)所做的修改必須與任何其他并發(fā)事務(wù)所做的修改隔離。事務(wù)查看數(shù)據(jù)更新時,數(shù)據(jù)所處的狀態(tài)要么是另一事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會查看到中間狀態(tài)的數(shù)據(jù)。
持久性:指的是只要事務(wù)成功結(jié)束,它對數(shù)據(jù)庫所做的更新就必須永久保存下來。即使發(fā)生系統(tǒng)崩潰,重新啟動數(shù)據(jù)庫系統(tǒng)后,數(shù)據(jù)庫還能恢復(fù)到事務(wù)成功結(jié)束時的狀態(tài)。
事務(wù)的(ACID)特性是由關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS,數(shù)據(jù)庫系統(tǒng))來實(shí)現(xiàn)的。數(shù)據(jù)庫管理系統(tǒng)采用日志來保證事務(wù)的原子性、一致性和持久性。日志記錄了事務(wù)對數(shù)據(jù)庫所做的更新,如果某個事務(wù)在執(zhí)行過程中發(fā)生錯誤,就可以根據(jù)日志,撤銷事務(wù)對數(shù)據(jù)庫已做的更新,使數(shù)據(jù)庫退回到執(zhí)行事務(wù)前的初始狀態(tài)。
數(shù)據(jù)庫管理系統(tǒng)采用鎖機(jī)制來實(shí)現(xiàn)事務(wù)的隔離性。當(dāng)多個事務(wù)同時更新數(shù)據(jù)庫中相同的數(shù)據(jù)時,只允許持有鎖的事務(wù)能更新該數(shù)據(jù),其他事務(wù)必須等待,直到前一個事務(wù)釋放了鎖,其他事務(wù)才有機(jī)會更新該數(shù)據(jù)。
MySql事務(wù)應(yīng)用
事務(wù)的特征:
Atomicity(原子性)
Consistency(穩(wěn)定性,一致性)
Isolation(隔離性)
Durability(可靠性)
注意:事務(wù)只針對對數(shù)據(jù)數(shù)據(jù)產(chǎn)生影響的語句有效。
show engines //查看mysql鎖支持的數(shù)據(jù)引擎。
MyISAM不支持事物,InnoDB支持事物。
默認(rèn)情況下,MySQL將以自動提交模式運(yùn)行,這意味著沒一條小命令都將當(dāng)做一個只有一條命令的事物來執(zhí)行。
如果要讓mysql支持支持事務(wù),只需要修改數(shù)據(jù)引擎(alter table person type=INNODB)。
使用start transaction或者begin命令來開啟一個事物,使用commit,或者rollback來結(jié)束事物。
事物的結(jié)束:事物除了commit,rollback會結(jié)束外,使用DDL或者DCL語句也會結(jié)束。
保存點(diǎn):通過保存點(diǎn)機(jī)制:用戶可以在事物里用savepoint name命令設(shè)置一些保存點(diǎn),以后用戶在使用rollback to savepoint name結(jié)束事物時,name之前的數(shù)據(jù)保存,之后的數(shù)據(jù)不保存。
mysql使用事務(wù)的關(guān)鍵字
begin //打開一個事務(wù)。
commit //提交到數(shù)據(jù)庫。
rollback //取消操作。
savepoint //保存,部分取消,部分提交。
alter table person type=INNODB //修改數(shù)據(jù)引擎。
示例:
begin
update person set name='efgh' where id =10
select * from person
rollback
select * from person
示例:
alter table person type=INNODB
begin
update person set name='efgh' where id =10
select * from person
commit
select * from person
begin
delete from person where id=21
update person set name='efgh' where id =10
commit/rollback
針對上面部分提交,必須用到保存點(diǎn)。
事務(wù)保存點(diǎn)注意:
1.只能取消到某個保存點(diǎn) rollback to savepoint p1。
2.不能提交某個保存 commit to savepoint p2//錯誤寫法。
3.最后commit 把未取消的保存點(diǎn)去不提交到數(shù)據(jù)。
事務(wù)保存點(diǎn)使用例子:
begin;
update score set score=40 where scoreid=1;
savepoint s1;
update score set score=50 where scoreid=2;
select * from score;
rollback to savepoint s1;
select * from score;
commit;
關(guān)于MySQL事務(wù)的操作就介紹到這里,如果您想了解更多關(guān)于MySQL數(shù)據(jù)庫的知識,可以看一下這里的文章:http://database.51cto.com/mysql/,相信一定不會讓大家失望的!
本條技術(shù)文章來源于互聯(lián)網(wǎng),如果無意侵犯您的權(quán)益請點(diǎn)擊此處反饋版權(quán)投訴
本文系統(tǒng)來源:php中文網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的mysql事物 总结_Mysql事务总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows+mysql+解压版_Wi
- 下一篇: python mysql股票分析_一颗韭