mysql回退事务使用_MySQL事务处理及字符集和校对顺序
一、事務處理
事務處理:是一種機制,管理必須成批執行的MySQL操作,以保證數據庫不包含不完整的操作結果。用來維護數據庫的完整性。
利用事務處理,可以保證一組操作不會中途停止,或作為整體執行或完全不執行(除非明確指示)。如果沒有發生錯誤,整組語句寫入數據庫,如發生錯誤,則進行回退,以恢復數據庫到某個已知且安全的狀態。
事務處理的幾個重要術語:
·事務:一組SQL語句;
·回退:撤銷指定SQL語句的過程;
·提交:將未存儲的SQL語句結果寫入數據庫表;
·保留點:事務處理中設置的臨時占位符,可以對它發布回退(與回退整個事務處理不同);
管理事務處理的關鍵:將SQL語句組分解為邏輯塊,并明確規定數據何時應該回退,何時不應回退。
start transaction:標識事務的開始
1、使用rollback
rollback命令用來回退(撤銷)MySQL語句,如下:
select * from ordertotals;
start transaction;
delete from ordertotals;
select * from ordertotals;
rollback;
select * from ordertotals;
解析:用rollback語句回退start transaction之后的所有語句,最后一條select語句顯示該表不為空。
PS:
rollback只能在一個事務處理內使用(在執行一條start transaction命令之后)。
事務處理用來管理select、insert和update語句;不能回退select語句(沒意義);不能回退create或drop操作(即使事務中使用這兩條語句,如果執行回退,它們也不會被撤銷)。
2、使用commit
一般MySQL語句都是直接針對數據庫表執行和編寫,也就是隱含提交,即提交(寫或保存)操作是自動的;但在事務處理塊中,提交不會隱含地進行。為進行明確的提交, 使用commit語句,如下:
start transaction;
delete from orderitems where order_num = '20010';
delete from orders where order_num = '20010';
commit;
解析:從系統中完全刪除訂單20010,涉及更新兩個數據庫表,所以使用事務處理塊來保證訂單不被部分刪除。commit語句僅在不出錯時寫出更改。如果第一條delete起作用,但第二條失敗,則delete不會提交(被自動撤銷)。
PS:當commit或rollback語句執行后,事務會自動關閉(將來的更改會隱含提交)。
3、使用保留點
復雜的事務處理可能需要部分提交或回退;
為了支持回退部分事務處理,必須能在事務處理塊中合適的位置放置占位符,如果需要回退,可以回退到某個占位符,這些占位符稱為保留點,為了創建占位符,可以使用savepoint語句,比如:savepoint deletel;
解析:每個保留點都取標識它的唯一名字,以便回退時MySQL知道要回退到何處。如為回退到本例給出的保留點,可以使用:rollback to deletel;
PS:保留點越多越好,這樣可以更靈活的回退;保留點在事務處理完成后自動釋放,或也可以用release savepoint明確的釋放保留點。
4、更改默認提交行為
默認的MySQL行為是自動提交所有更改,即該SQL語句都是針對表執行的,而且立即生效;為指示MySQL不自動提交更改,可以使用:set autocommit = 0;
autocommit標志決定是否自動提交更改,不管有沒有commit語句;即設置autocommit=0(假)指示MySQL不自動提交更改(直到autocommit被設置為真為止)。
PS:autocommit標志是針對每個連接,而不是服務器。
二、字符集和校對順序
數據庫表被用來存儲和檢索數據,不同的語言和字符集需要以不同的方式存儲和檢索。因此MySQL需要適應不同的字符集,適應不同排序和檢索數據的方法。
常見的術語:
·字符集:字母和符號的組合
·編碼:為某個字符集成員的內部表示
·校對:為規定字符如何比較的指令
1、查看字符集
查看所支持的字符集完整列表,可以使用:show character set;
這條語句顯示所有可用的字符集以及每個字符集的描述和默認校對。
為查看所支持校對的完整列表,可使用:show collation;
此語句顯示所有可用的校對,以及它們適用的字符集。
PS:通常系統管理在安裝時定義一個默認的字符集合校對,也可在創建數據庫時,指定默認的字符集和校對;為了確定所用字符集合校對,可使用以下語句:
show variables like 'character%';
show cariables like 'collation%';
PS:事實上,字符集很少是服務器范圍(甚至數據庫范圍);不同表甚至不同列,都可能需要不同字符集,而且兩者都可以在創建表時指定。
2、指定字符集和校對
為了給表指定字符集和校對,可使用如下語句:
create table mytable
( columnn1 int,
columnn2 varchar(10)
) default character set hebrew
collate hebrew_general_ci;
解析:創建一個包含兩列的表,并且指定字符集和校對順序。
MySQL默認使用的字符集和校對:
·如果指定character set和collate兩者,則使用這些值;
·如果只指定character set,則使用此字符集及其默認的校對;
·如果既不指定character set,也不指定collate,則使用數據庫默認。
PS:MySQL允許對每個列設置字符集和校對,例句如下:
create table mytable
(
columnn1 int,
columnn2 varchar(10),
columnn3 varchar(10) character set latin1 collate latin1_general_ci
) default character set hebrew
collate hebrew_general_ci;
校對在對用order by子句檢索出來的數據排序時起重要的作用,如果你需要用與創建表時不同的校對順序排序特定的select語句,可以在select語句自身中進行,比如:
select * from customers
order by lastname,firstname collate latinl_general_cs;
select使用collate指定一個備用的校對順序(為區分大小寫校對),這樣將影響到結果排序的次序。COLLATE還可以用于GROUP BY、HAVING、聚集 函數、別名等。
PS:如果絕對需要,串可以在字符集之間進行轉換,使用cast()或 convert()函數。

[**最新2020整理收集的一些高頻面試題(都整理成文檔),有很多干貨,包含mysql,netty,spring,線程,spring cloud、jvm、源碼、算法等詳細講解,也有詳細的學習規劃圖,面試題整理等,需要獲取這些內容的朋友請加Q君樣:909038429**](https://jq.qq.com/?_wv=1027&k=LTrB46U1)
/./*歡迎加入java交流Q君樣:909038429一起吹水聊天
總結
以上是生活随笔為你收集整理的mysql回退事务使用_MySQL事务处理及字符集和校对顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 灭火器的分类有(灭火器有哪几种分类)
- 下一篇: 灭火器有哪几种类型(灭火器有哪几种分类)