修改存儲引擎中途斷開會怎麼樣
① 事務在觸發器中結束怎麼修改
一、什麼是事務?
事務就是一段sql語句的批處理,但是這個批處理是一個atom(原子) ,不可分割,要麼都執行,要麼回滾(rollback)都不執行。
通俗點舉個例子:
有一天張三給李四要轉錢,那麼銀行的資料庫就要把張三的賬戶減去1000元(-1000),李四的賬戶就要增加1000元(+1000),這兩個更新語句必須作為一個整體來執行,不然就會出現張三賬戶扣掉了1000元錢而李四賬戶並沒有增加1000元錢,然而這種情況很難找出原因,所以就需要這倆個操作作為一個整體要麼一起失敗都沒有執行,要麼就一起成功一個增加1000元、一個減少1000元,這就是事務在實際中的具體體現。
二、事務的四個特性
1)、原子性(atomicity):原子性是指整個資料庫事務是不可分割的工作單位
2)、一致性(consistency):一致性指事務將資料庫從一種狀態轉變為下一種一致的狀態。在事務開始之前和事務結束之後,資料庫的完整性約束沒有被破壞。
3)、隔離性(isolation):一個事務的影響在該事務提交之前對其他事務都不可見---通過鎖來實現。
4)、持久性(rability):事務一旦提交,其結果就是永久性的 。
三、務依賴InnoDB存儲引擎
事務的執行是需要存儲引擎來支持的,那麼存儲引擎是什麼呢?
存儲引擎顧名思義就是資料庫如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。因為在關系資料庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)。
主要存儲引擎:Myisam、InnoDB、MEMORY、Archive、BDB等,其中MyISAM與InnoDB的區別如下:
修改存儲引擎的方法為,如圖:
1、首先右鍵打開設計表菜單
2、選擇「選項」選項卡,在第一行中的引擎下拉菜單中選擇InnoDB即可;
四、執行事務的三步驟
我們還是繼續剛才的轉賬的案例,
1、開啟事務:
Start transaction
2、執行sql語句組
update account set money=money+1000 where id=2
update account set money=money-1000 where id=1
3、commit(提交事務)或rollback(回滾事務)
注意:當一個事務commit或rollback就結束了,下次還要重新開啟事務;
五、在TP5中使用事務
TP5中使用事務有兩種方式,一種為自動事務,一種為手動事務。
自動事務:通過執行SQL語句過程中是否拋出異常來決定事務是提交執行還是回滾處理,如下例所示,如果向test_a和test_b兩個表中插入語句。
如果test_b表中id欄位為自增的主鍵時,並且含有主鍵為1的數據時,插入語句會出現執行錯誤,TP5框架會拋出異常,如圖:
此時,如果沒有使用事務或者使用事務而沒有使用InnoDB的存儲引擎時,資料庫的結果就會在test_a表中插入一條ID為13的數據,而test_b表卻沒有插入成功,如圖所示:
如果使用事務並且也應用了InnoDB的存儲引擎的時候,數據表中的數據會沒有變化,ID為13的記錄不會增加到test_a表中,如下圖
自動事務最大的優勢為代碼簡潔,但只能通過是否拋出異常來進行判斷事務是否回滾,用法有一些限制。但手動事務即可以通過在SQL語句上增加try{}catche(){}語句來捕獲異常來判斷是否回滾事務,也可以通過代碼的返回值來判斷是否提交事務,相比較來說手動事務更加自由和方便。
手動事務:
方法一:通過是否能夠捕獲到異常來判斷是否回滾事務
方法二:通過語句執行結果來判斷是否回滾事務
最終結果如下:
六、最後總結
通過比較兩種不同方式來實現事務,個人推薦採用第二種並且通過捕獲異常的方式來處理事務,原因其實很簡單,這樣執行首先可以保證事務正常運行,而且還可以通過異常的處理保證程序的順利執行,提升代碼的健壯性,並且還可以根據實際業務情況選擇通過判斷語句返回值來決定是否回滾事務,這樣更提升了代碼的靈活性。
寫在最後:
在TP的事務代碼調用中,既可以用DB類來調用也可以使用模型類來調用,對事務本身毫無影響,其實就是利用資料庫的類將原生的事務語句加入到SQL中去執行而已。
② mysql修改表的存儲引擎會對已有數據有影響么
mysql的存儲引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事務安全表,其他存儲引擎都是非事務安全表。 最常使用的2種存儲引擎: 1.Myisam是Mysql的默認存儲引擎,當create創建新表時,未指定新表的存儲引擎時,默認使用Myisam。每個MyISAM在磁碟上存儲成三個文件。文件名都和表名相同,擴展名分別是.frm(存儲表定義)、.MYD(MYData,存儲數據)、.MYI(MYIndex,存儲索引)。數據文件和索引文件可以放置在不同的目錄,平均分布io,獲得更快的速度。 2.InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比Myisam的存儲引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁碟空間以保留數據和索引。
