怎么理解mysql的事務(wù) mysql事物應(yīng)該怎么解釋

MySQL知識(shí)點(diǎn)總結(jié)

只要字段值還可以繼續(xù)拆分,就不滿足第一范式。

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比嘉峪關(guān)網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式嘉峪關(guān)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋嘉峪關(guān)地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。

范式設(shè)計(jì)得越詳細(xì),對(duì)某些實(shí)際操作可能會(huì)更好,但并非都有好處,需要對(duì)項(xiàng)目的實(shí)際情況進(jìn)行設(shè)定。

在滿足第一范式的前提下,其他列都必須完全依賴于主鍵列。 如果出現(xiàn)不完全依賴,只可能發(fā)生在聯(lián)合主鍵的情況下:

實(shí)際上,在這張訂單表中,product_name 只依賴于 product_id ,customer_name 只依賴于 customer_id。也就是說,product_name 和 customer_id 是沒用關(guān)系的,customer_name 和 product_id 也是沒有關(guān)系的。

這就不滿足第二范式:其他列都必須完全依賴于主鍵列!

拆分之后,myorder 表中的 product_id 和 customer_id 完全依賴于 order_id 主鍵,而 product 和 customer 表中的其他字段又完全依賴于主鍵。滿足了第二范式的設(shè)計(jì)!

在滿足第二范式的前提下,除了主鍵列之外,其他列之間不能有傳遞依賴關(guān)系。

表中的 customer_phone 有可能依賴于 order_id 、 customer_id 兩列,也就不滿足了第三范式的設(shè)計(jì):其他列之間不能有傳遞依賴關(guān)系。

修改后就不存在其他列之間的傳遞依賴關(guān)系,其他列都只依賴于主鍵列,滿足了第三范式的設(shè)計(jì)!

查詢每門課的平均成績(jī)。

查詢 score 表中至少有 2 名學(xué)生選修,并以 3 開頭的課程的平均分?jǐn)?shù)。

分析表發(fā)現(xiàn),至少有 2 名學(xué)生選修的課程是 3-105 、3-245 、6-166 ,以 3 開頭的課程是 3-105 、3-245。也就是說,我們要查詢所有 3-105 和 3-245 的 degree 平均分。

查詢所有學(xué)生的 name,以及該學(xué)生在 score 表中對(duì)應(yīng)的 c_no 和 degree 。

通過分析可以發(fā)現(xiàn),只要把 score 表中的 s_no 字段值替換成 student 表中對(duì)應(yīng)的 name 字段值就可以了,如何做呢?

查詢所有學(xué)生的 no 、課程名稱 ( course 表中的 name ) 和成績(jī) ( score 表中的 degree ) 列。

只有 score 關(guān)聯(lián)學(xué)生的 no ,因此只要查詢 score 表,就能找出所有和學(xué)生相關(guān)的 no 和 degree :

然后查詢 course 表:

只要把 score 表中的 c_no 替換成 course 表中對(duì)應(yīng)的 name 字段值就可以了。

查詢所有學(xué)生的 name 、課程名 ( course 表中的 name ) 和 degree 。

只有 score 表中關(guān)聯(lián)學(xué)生的學(xué)號(hào)和課堂號(hào),我們只要圍繞著 score 這張表查詢就好了。

只要把 s_no 和 c_no 替換成 student 和 srouse 表中對(duì)應(yīng)的 name 字段值就好了。

首先把 s_no 替換成 student 表中的 name 字段:

再把 c_no 替換成 course 表中的 name 字段:

查詢 95031 班學(xué)生每門課程的平均成績(jī)。

在 score 表中根據(jù) student 表的學(xué)生編號(hào)篩選出學(xué)生的課堂號(hào)和成績(jī):

這時(shí)只要將 c_no 分組一下就能得出 95031 班學(xué)生每門課的平均成績(jī):

查詢?cè)?3-105 課程中,所有成績(jī)高于 109 號(hào)同學(xué)的記錄。

首先篩選出課堂號(hào)為 3-105 ,在找出所有成績(jī)高于 109 號(hào)同學(xué)的的行。

查詢所有成績(jī)高于 109 號(hào)同學(xué)的 3-105 課程成績(jī)記錄。

查詢所有和 101 、108 號(hào)學(xué)生同年出生的 no 、name 、birthday 列。

查詢 '張旭' 教師任課的學(xué)生成績(jī)表。

首先找到教師編號(hào):

通過 sourse 表找到該教師課程號(hào):

通過篩選出的課程號(hào)查詢成績(jī)表:

查詢某選修課程多于5個(gè)同學(xué)的教師姓名。

首先在 teacher 表中,根據(jù) no 字段來判斷該教師的同一門課程是否有至少5名學(xué)員選修:

查看和教師編號(hào)有有關(guān)的表的信息:

我們已經(jīng)找到和教師編號(hào)有關(guān)的字段就在 course 表中,但是還無(wú)法知道哪門課程至少有5名學(xué)生選修,所以還需要根據(jù) score 表來查詢:

根據(jù)篩選出來的課程號(hào),找出在某課程中,擁有至少5名學(xué)員的教師編號(hào):

在 teacher 表中,根據(jù)篩選出來的教師編號(hào)找到教師姓名:

查詢 “計(jì)算機(jī)系” 課程的成績(jī)表。

思路是,先找出 course 表中所有 計(jì)算機(jī)系 課程的編號(hào),然后根據(jù)這個(gè)編號(hào)查詢 score 表。

查詢 計(jì)算機(jī)系 與 電子工程系 中的不同職稱的教師。

查詢課程 3-105 且成績(jī) 至少 高于 3-245 的 score 表。

查詢課程 3-105 且成績(jī)高于 3-245 的 score 表。

查詢某課程成績(jī)比該課程平均成績(jī)低的 score 表。

查詢所有任課 ( 在 course 表里有課程 ) 教師的 name 和 department 。

查詢 student 表中至少有 2 名男生的 class 。

查詢 student 表中不姓 "王" 的同學(xué)記錄。

查詢 student 表中每個(gè)學(xué)生的姓名和年齡。

查詢 student 表中最大和最小的 birthday 值。

以 class 和 birthday 從大到小的順序查詢 student 表。

查詢 "男" 教師及其所上的課程。

查詢最高分同學(xué)的 score 表。

查詢和 "李軍" 同性別的所有同學(xué) name 。

查詢和 "李軍" 同性別且同班的同學(xué) name 。

查詢所有選修 "計(jì)算機(jī)導(dǎo)論" 課程的 "男" 同學(xué)成績(jī)表。

需要的 "計(jì)算機(jī)導(dǎo)論" 和性別為 "男" 的編號(hào)可以在 course 和 student 表中找到。

建立一個(gè) grade 表代表學(xué)生的成績(jī)等級(jí),并插入數(shù)據(jù):

查詢所有學(xué)生的 s_no 、c_no 和 grade 列。

思路是,使用區(qū)間 ( BETWEEN ) 查詢,判斷學(xué)生的成績(jī) ( degree ) 在 grade 表的 low 和 upp 之間。

準(zhǔn)備用于測(cè)試連接查詢的數(shù)據(jù):

分析兩張表發(fā)現(xiàn),person 表并沒有為 cardId 字段設(shè)置一個(gè)在 card 表中對(duì)應(yīng)的 id 外鍵。如果設(shè)置了的話,person 中 cardId 字段值為 6 的行就插不進(jìn)去,因?yàn)樵?cardId 值在 card 表中并沒有。

要查詢這兩張表中有關(guān)系的數(shù)據(jù),可以使用 INNER JOIN ( 內(nèi)連接 ) 將它們連接在一起。

完整顯示左邊的表 ( person ) ,右邊的表如果符合條件就顯示,不符合則補(bǔ) NULL 。

完整顯示右邊的表 ( card ) ,左邊的表如果符合條件就顯示,不符合則補(bǔ) NULL 。

完整顯示兩張表的全部數(shù)據(jù)。

在 MySQL 中,事務(wù)其實(shí)是一個(gè)最小的不可分割的工作單元。事務(wù)能夠 保證一個(gè)業(yè)務(wù)的完整性 。

比如我們的銀行轉(zhuǎn)賬:

在實(shí)際項(xiàng)目中,假設(shè)只有一條 SQL 語(yǔ)句執(zhí)行成功,而另外一條執(zhí)行失敗了,就會(huì)出現(xiàn)數(shù)據(jù)前后不一致。

因此,在執(zhí)行多條有關(guān)聯(lián) SQL 語(yǔ)句時(shí), 事務(wù) 可能會(huì)要求這些 SQL 語(yǔ)句要么同時(shí)執(zhí)行成功,要么就都執(zhí)行失敗。

在 MySQL 中,事務(wù)的 自動(dòng)提交 狀態(tài)默認(rèn)是開啟的。

自動(dòng)提交的作用 :當(dāng)我們執(zhí)行一條 SQL 語(yǔ)句的時(shí)候,其產(chǎn)生的效果就會(huì)立即體現(xiàn)出來,且不能 回滾 。

什么是回滾?舉個(gè)例子:

可以看到,在執(zhí)行插入語(yǔ)句后數(shù)據(jù)立刻生效,原因是 MySQL 中的事務(wù)自動(dòng)將它 提交 到了數(shù)據(jù)庫(kù)中。那么所謂 回滾 的意思就是,撤銷執(zhí)行過的所有 SQL 語(yǔ)句,使其回滾到 最后一次提交 數(shù)據(jù)時(shí)的狀態(tài)。

在 MySQL 中使用 ROLLBACK 執(zhí)行回滾:

由于所有執(zhí)行過的 SQL 語(yǔ)句都已經(jīng)被提交過了,所以數(shù)據(jù)并沒有發(fā)生回滾。那如何讓數(shù)據(jù)可以發(fā)生回滾?

將自動(dòng)提交關(guān)閉后,測(cè)試數(shù)據(jù)回滾:

那如何將虛擬的數(shù)據(jù)真正提交到數(shù)據(jù)庫(kù)中?使用 COMMIT :

事務(wù)的實(shí)際應(yīng)用 ,讓我們?cè)倩氐姐y行轉(zhuǎn)賬項(xiàng)目:

這時(shí)假設(shè)在轉(zhuǎn)賬時(shí)發(fā)生了意外,就可以使用 ROLLBACK 回滾到最后一次提交的狀態(tài):

這時(shí)我們又回到了發(fā)生意外之前的狀態(tài),也就是說,事務(wù)給我們提供了一個(gè)可以反悔的機(jī)會(huì)。假設(shè)數(shù)據(jù)沒有發(fā)生意外,這時(shí)可以手動(dòng)將數(shù)據(jù)真正提交到數(shù)據(jù)表中:COMMIT 。

事務(wù)的默認(rèn)提交被開啟 ( @@AUTOCOMMIT = 1 ) 后,此時(shí)就不能使用事務(wù)回滾了。但是我們還可以手動(dòng)開啟一個(gè)事務(wù)處理事件,使其可以發(fā)生回滾:

仍然使用 COMMIT 提交數(shù)據(jù),提交后無(wú)法再發(fā)生本次事務(wù)的回滾。

事務(wù)的四大特征:

事務(wù)的隔離性可分為四種 ( 性能從低到高 ) :

查看當(dāng)前數(shù)據(jù)庫(kù)的默認(rèn)隔離級(jí)別:

修改隔離級(jí)別:

測(cè)試 READ UNCOMMITTED ( 讀取未提交 ) 的隔離性:

由于小明的轉(zhuǎn)賬是在新開啟的事務(wù)上進(jìn)行操作的,而該操作的結(jié)果是可以被其他事務(wù)(另一方的淘寶店)看見的,因此淘寶店的查詢結(jié)果是正確的,淘寶店確認(rèn)到賬。但就在這時(shí),如果小明在它所處的事務(wù)上又執(zhí)行了 ROLLBACK 命令,會(huì)發(fā)生什么?

這就是所謂的 臟讀 ,一個(gè)事務(wù)讀取到另外一個(gè)事務(wù)還未提交的數(shù)據(jù)。這在實(shí)際開發(fā)中是不允許出現(xiàn)的。

把隔離級(jí)別設(shè)置為 READ COMMITTED :

這樣,再有新的事務(wù)連接進(jìn)來時(shí),它們就只能查詢到已經(jīng)提交過的事務(wù)數(shù)據(jù)了。但是對(duì)于當(dāng)前事務(wù)來說,它們看到的還是未提交的數(shù)據(jù),例如:

但是這樣還有問題,那就是假設(shè)一個(gè)事務(wù)在操作數(shù)據(jù)時(shí),其他事務(wù)干擾了這個(gè)事務(wù)的數(shù)據(jù)。例如:

雖然 READ COMMITTED 讓我們只能讀取到其他事務(wù)已經(jīng)提交的數(shù)據(jù),但還是會(huì)出現(xiàn)問題,就是 在讀取同一個(gè)表的數(shù)據(jù)時(shí),可能會(huì)發(fā)生前后不一致的情況。* 這被稱為* 不可重復(fù)讀現(xiàn)象 ( READ COMMITTED ) 。

將隔離級(jí)別設(shè)置為 REPEATABLE READ ( 可被重復(fù)讀取 ) :

測(cè)試 REPEATABLE READ ,假設(shè)在兩個(gè)不同的連接上分別執(zhí)行 START TRANSACTION :

當(dāng)前事務(wù)開啟后,沒提交之前,查詢不到,提交后可以被查詢到。但是,在提交之前其他事務(wù)被開啟了,那么在這條事務(wù)線上,就不會(huì)查詢到當(dāng)前有操作事務(wù)的連接。相當(dāng)于開辟出一條單獨(dú)的線程。

無(wú)論小張是否執(zhí)行過 COMMIT ,在小王這邊,都不會(huì)查詢到小張的事務(wù)記錄,而是只會(huì)查詢到自己所處事務(wù)的記錄:

這是 因?yàn)樾⊥踉诖酥伴_啟了一個(gè)新的事務(wù) ( START TRANSACTION ) * ,那么* 在他的這條新事務(wù)的線上,跟其他事務(wù)是沒有聯(lián)系的 ,也就是說,此時(shí)如果其他事務(wù)正在操作數(shù)據(jù),它是不知道的。

然而事實(shí)是,在真實(shí)的數(shù)據(jù)表中,小張已經(jīng)插入了一條數(shù)據(jù)。但是小王此時(shí)并不知道,也插入了同一條數(shù)據(jù),會(huì)發(fā)生什么呢?

報(bào)錯(cuò)了,操作被告知已存在主鍵為 6 的字段。這種現(xiàn)象也被稱為 幻讀,一個(gè)事務(wù)提交的數(shù)據(jù),不能被其他事務(wù)讀取到 。

顧名思義,就是所有事務(wù)的 寫入操作 全都是串行化的。什么意思?把隔離級(jí)別修改成 SERIALIZABLE :

還是拿小張和小王來舉例:

此時(shí)會(huì)發(fā)生什么呢?由于現(xiàn)在的隔離級(jí)別是 SERIALIZABLE ( 串行化 ) ,串行化的意思就是:假設(shè)把所有的事務(wù)都放在一個(gè)串行的隊(duì)列中,那么所有的事務(wù)都會(huì)按照 固定順序執(zhí)行 ,執(zhí)行完一個(gè)事務(wù)后再繼續(xù)執(zhí)行下一個(gè)事務(wù)的 寫入操作 ( 這意味著隊(duì)列中同時(shí)只能執(zhí)行一個(gè)事務(wù)的寫入操作 ) 。

根據(jù)這個(gè)解釋,小王在插入數(shù)據(jù)時(shí),會(huì)出現(xiàn)等待狀態(tài),直到小張執(zhí)行 COMMIT 結(jié)束它所處的事務(wù),或者出現(xiàn)等待超時(shí)。

轉(zhuǎn)載:

Mysql數(shù)據(jù)庫(kù)中,事務(wù)是指什么?如何使用該功能?

MySQL 事務(wù)

什么是事務(wù)?

MySQL 事務(wù)主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù)。比如說,在人員管理系統(tǒng)中,你刪除一個(gè)人員,你既需要?jiǎng)h除人員的基本資料,也要?jiǎng)h除和該人員相關(guān)的信息,如信箱,文章等等,這樣,這些數(shù)據(jù)庫(kù)操作語(yǔ)句就構(gòu)成一個(gè)事務(wù)!

在 MySQL 中只有使用了 Innodb 數(shù)據(jù)庫(kù)引擎的數(shù)據(jù)庫(kù)或表才支持事務(wù)。

事務(wù)處理可以用來維護(hù)數(shù)據(jù)庫(kù)的完整性,保證成批的 SQL 語(yǔ)句要么全部執(zhí)行,要么全部不執(zhí)行。

事務(wù)用來管理 insert,update,delete 語(yǔ)句

一般來說,事務(wù)是必須滿足4個(gè)條件(ACID):原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨(dú)立性)、持久性(Durability)。

原子性:一個(gè)事務(wù)(transaction)中的所有操作,要么全部完成,要么全部不完成,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個(gè)事務(wù)從來沒有執(zhí)行過一樣。

一致性:在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫(kù)的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫(kù)可以自發(fā)性地完成預(yù)定的工作。

隔離性:數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫和修改的能力,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級(jí)別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)。

持久性:事務(wù)處理結(jié)束后,對(duì)數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會(huì)丟失。

在 MySQL 命令行的默認(rèn)設(shè)置下,事務(wù)都是自動(dòng)提交的,即執(zhí)行 SQL 語(yǔ)句后就會(huì)馬上執(zhí)行 COMMIT 操作。因此要顯式地開啟一個(gè)事務(wù)務(wù)須使用命令 BEGIN 或 START TRANSACTION,或者執(zhí)行命令 SET AUTOCOMMIT=0,用來禁止使用當(dāng)前會(huì)話的自動(dòng)提交。

from 樹懶學(xué)堂 - 一站式數(shù)據(jù)知識(shí)平臺(tái)

什么是事務(wù)?具有哪些特性?mysql中

事務(wù)是數(shù)據(jù)庫(kù)操作最小單元,把多件事當(dāng)一件事來處理,是一組不可在分割的操作集合。作為單個(gè)邏輯工作單元執(zhí)行一系列操作,這些操作作為一個(gè)整體一起向系統(tǒng)提交,要么都執(zhí)行,要么都不執(zhí)行。

特性ACID(原子性、一致性、隔離性、持久性)

原子性:原子性是指事務(wù)包含的所有操作要么全部成功,要么全部失敗回滾,,因此事務(wù)操作如果成功就必須要完全應(yīng)用到數(shù)據(jù)庫(kù),如果操作失敗則不能對(duì)數(shù)據(jù)庫(kù)有一點(diǎn)影響。

一致性:一致性是指事務(wù)必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)轉(zhuǎn)換到另一個(gè)一致性狀態(tài),就是說事務(wù)執(zhí)行前后都必須處在一致性狀態(tài)。

隔離性:隔離性使當(dāng)多個(gè)用戶訪問數(shù)據(jù)庫(kù)時(shí),比如操作同一張表,數(shù)據(jù)庫(kù)開啟的每一個(gè)事務(wù),不能被其它事務(wù)干擾,多個(gè)并發(fā)事務(wù)之間相互隔離。

持久性:持久性是指一個(gè)事務(wù)一旦提交,對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變是永久的,即使是數(shù)據(jù)庫(kù)系統(tǒng)遇到故障也不會(huì)丟失提交的事務(wù)操作。

談?wù)勀銓?duì) mysql 事務(wù)的認(rèn)識(shí) 我是php初學(xué)者不懂這個(gè) 想請(qǐng)教大神教我

先簡(jiǎn)單介紹一下事務(wù)吧!事務(wù)是DBMS得執(zhí)行單位。它由有限得數(shù)據(jù)庫(kù)操作序列組成得。但不是任意得數(shù)據(jù)庫(kù)操作序列都能成為事務(wù)。一般來說,事務(wù)是必須滿足4個(gè)條件(ACID)

原子性(Autmic):事務(wù)在執(zhí)行性,要做到“要么不做,要么全做!”,就是說不允許事務(wù)部分得執(zhí)行。即使因?yàn)楣收隙故聞?wù)不能完成,在rollback時(shí)也要消除對(duì)數(shù)據(jù)庫(kù)得影響!

一致性(Consistency):事務(wù)得操作應(yīng)該使使數(shù)據(jù)庫(kù)從一個(gè)一致狀態(tài)轉(zhuǎn)變倒另一個(gè)一致得狀態(tài)!就拿網(wǎng)上購(gòu)物來說吧,你只有即讓商品出庫(kù),又讓商品進(jìn)入顧客得購(gòu)物籃才能構(gòu)成事務(wù)!

隔離性(Isolation):如果多個(gè)事務(wù)并發(fā)執(zhí)行,應(yīng)象各個(gè)事務(wù)獨(dú)立執(zhí)行一樣!

持久性(Durability):一個(gè)成功執(zhí)行得事務(wù)對(duì)數(shù)據(jù)庫(kù)得作用是持久得,即使數(shù)據(jù)庫(kù)應(yīng)故障出錯(cuò),也應(yīng)該能夠恢復(fù)!

MYSQL的事務(wù)處理主要有兩種方法。

1、用begin,rollback,commit來實(shí)現(xiàn)

begin

開始一個(gè)事務(wù)

rollback 事務(wù)回滾

commit 事務(wù)確認(rèn)

2、直接用set來改變mysql的自動(dòng)提交模式

MYSQL默認(rèn)是自動(dòng)提交的,也就是你提交一個(gè)QUERY,它就直接執(zhí)行!我們可以通過

set autocommit=0

禁止自動(dòng)提交

set autocommit=1 開啟自動(dòng)提交

來實(shí)現(xiàn)事務(wù)的處理。

但注意當(dāng)你用 set

autocommit=0

的時(shí)候,你以后所有的SQL都將做為事務(wù)處理,直到你用commit確認(rèn)或rollback結(jié)束,注意當(dāng)你結(jié)束這個(gè)事務(wù)的同時(shí)也開啟了個(gè)新的事務(wù)!按第一種方法只將當(dāng)前的作為一個(gè)事務(wù)!

個(gè)人推薦使用第一種方法!

MYSQL中只有INNODB和BDB類型的數(shù)據(jù)表才能支持事務(wù)處理!其他的類型是不支持的?。ㄇ杏洠。?/p>

下次有空說下MYSQL的數(shù)據(jù)表的鎖定和解鎖!

MYSQL5.0 WINXP下測(cè)試通過~ ^_^

mysql use test;

Database

changed

mysql CREATE TABLE `dbtest`(

- id int(4)

- ) TYPE=INNODB;

Query OK, 0 rows affected, 1 warning (0.05

sec)

mysql select * from dbtest

- ;

Empty set (0.01

sec)

mysql begin;

Query OK, 0 rows affected (0.00

sec)

mysql insert into dbtest value(5);

Query OK, 1 row affected

(0.00 sec)

mysql insert into dbtest value(6);

Query OK, 1 row

affected (0.00 sec)

mysql commit;

Query OK, 0 rows affected (0.00

sec)

mysql select * from dbtest;

+------+

| id

|

+------+

| 5 |

| 6 |

+------+

2 rows in set (0.00

sec)

mysql begin;

Query OK, 0 rows affected (0.00

sec)

mysql insert into dbtest values(7);

Query OK, 1 row affected

(0.00 sec)

mysql rollback;

Query OK, 0 rows affected (0.00

sec)

mysql select * from dbtest;

+------+

| id

|

+------+

| 5 |

| 6 |

+------+

2 rows in set (0.00

sec)

mysql

*******************************************************************************************************************

[PHP]

function

Tran( $sql ) {

$judge = 1;

mysql_query('begin');

foreach ($sql as $v) {

if

( !mysql_query($v) ) {

$judge =

0;

}

}

if ($judge == 0)

{

mysql_query('rollback');

return

false;

}

elseif ($judge == 1) {

mysql_query('commit');

return true;

}

}

[/PHP]

************************************************

?php

$handler=mysql_connect("localhost","root","");

mysql_select_db("task");

mysql_query("SET

AUTOCOMMIT=0");//設(shè)置為不自動(dòng)提交,因?yàn)镸YSQL默認(rèn)立即執(zhí)行

mysql_query("BEGIN");//開始事務(wù)定義

if(!mysql_query("insert

into trans (id)

values('2')"))

{

mysql_query("ROOLBACK");//判斷當(dāng)執(zhí)行失敗時(shí)回滾

}

if(!mysql_query("insert

into trans (id)

values('4')"))

{

mysql_query("ROOLBACK");//判斷執(zhí)行失敗回滾

}

mysql_query("COMMIT");//執(zhí)行事務(wù)

mysql_close($handler);

?

引自:

網(wǎng)站名稱:怎么理解mysql的事務(wù) mysql事物應(yīng)該怎么解釋
網(wǎng)站URL:http://muchs.cn/article8/doeccop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、標(biāo)簽優(yōu)化、用戶體驗(yàn)品牌網(wǎng)站建設(shè)、服務(wù)器托管、企業(yè)網(wǎng)站制作

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)