在預設情況下,mysql每執行一條sql語句,都是乙個單獨的事務。如果需要在乙個事務中包含多條sql語句,那麼需要開啟事務和結束事務。
開啟事務:start transaction
結束事務:commit或rollback
在執行sql語句之前,先執行start transaction,這就開啟了乙個事務(事務的起點),然後可以去執行多條sql語句,最後要結束事務,commit表示提交,即事務中的多條sql語句所作出的影響會持久到資料庫中,或者rollback,表示回滾到事務的起點,之前做的所有操作都被撤銷了。
mysql> select * from account;+--
--+------+
----
-----+
| id | name | balance |+--
--+------+
----
-----+
|1| zs |
1000.00||
2| ls |
1000.00||
3| ww |
1000.00|+
----+--
----+--
-------
+3 rows in set (
0.00 sec)
mysql> start transaction;
query ok,
0 rows affected (
0.00 sec)
mysql> update account set balance=
900 where name =
'zs'
;query ok,
1 row affected (
0.00 sec)
rows matched:
1 changed:
1 warnings:
0mysql> select * from account;+--
--+------+
----
-----+
| id | name | balance |+--
--+------+
----
-----+
|1| zs |
900.00||
2| ls |
1000.00||
3| ww |
1000.00|+
----+--
----+--
-------
+3 rows in set (
0.00 sec)
mysql> update account set balance=
1100 where name =
'ls'
;query ok,
1 row affected (
0.00 sec)
rows matched:
1 changed:
1 warnings:
0mysql> select * from account;+--
--+------+
----
-----+
| id | name | balance |+--
--+------+
----
-----+
|1| zs |
900.00||
2| ls |
1100.00||
3| ww |
1000.00|+
----+--
----+--
-------
+3 rows in set (
0.00 sec)
mysql> rollback;
query ok,
0 rows affected (
0.00 sec)
mysql> select * from account;+--
--+------+
----
-----+
| id | name | balance |+--
--+------+
----
-----+
|1| zs |
1000.00||
2| ls |
1000.00||
3| ww |
1000.00|+
----+--
----+--
-------
+3 rows in set (
0.00 sec)
mysql> start transaction;
query ok,
0 rows affected (
0.00 sec)
mysql> update account set balance=balance-
100 where name =
'zs'
;query ok,
1 row affected (
0.00 sec)
rows matched:
1 changed:
1 warnings:
0mysql> select * from account;+--
--+------+
----
-----+
| id | name | balance |+--
--+------+
----
-----+
|1| zs |
900.00||
2| ls |
1000.00||
3| ww |
1000.00|+
----+--
----+--
-------
+3 rows in set (
0.00 sec)
mysql> update account set balance=balance+
100 where name =
'ls'
;query ok,
1 row affected (
0.00 sec)
rows matched:
1 changed:
1 warnings:
0mysql> select * from account;+--
--+------+
----
-----+
| id | name | balance |+--
--+------+
----
-----+
|1| zs |
900.00||
2| ls |
1100.00||
3| ww |
1000.00|+
----+--
----+--
-------
+3 rows in set (
0.00 sec)
mysql> commit;
query ok,
0 rows affected (
0.02 sec)
mysql> select * from account;+--
--+------+
----
-----+
| id | name | balance |+--
--+------+
----
-----+
|1| zs |
900.00||
2| ls |
1100.00||
3| ww |
1000.00|+
----+--
----+--
-------
+3 rows in set (
0.00 sec)
在jdbc中處理事務,都是通過connection完成的。
同一事務中所有的操作,都在使用同乙個connection物件。
①jdbc中的事務
connection的三個方法與事務有關:
setautocommit(boolean):設定是否為自動提交事務,如果true(預設值為true)表示自動提交,也就是每條執行的sql語句都是乙個單獨的事務,如果設定為false,那麼相當於開啟了事務了;con.setautocommit(false) 表示開啟事務。
commit():提交結束事務。
rollback():回滾結束事務。
try
catch()
完整示例:
public
static
void
main
(string[
] args)
else
}catch
(exception e)
catch
(sqlexception e1)
}finally
}
jdbc處理事務操作
前提 如果有多個操作,則必須保證所有的操作都同時使用乙個連線,則無法保證事務 開啟事務,取消connection的預設提交功能 connection.setautocommit false 具體操作步驟 操作成功則提交事務,丟擲異常則回滾事務 在catch塊中 connection.commit c...
Spring處理事務
不同的訪問資料庫方式有不同的事務處理機制 物件 方法。而spring提供了一種處理事務的統一模型,能使用統一步驟 方式完成多種不同資料庫訪問計數的事務處理。spring處理事務的模型 步驟都是固定的。事務內部提交,回滾事務,使用的都是事務管理器物件,代替我們完成commit,rollback。事務管...
mysql資料處理 事務
事務 乙個原子操作,乙個最小的執行單元,可以有乙個或者多個sql語句組成。當乙個事務中有一句sql語句執行失敗,則整個事務失敗。執行一條dml語句 增刪改 執行性成功叫提交 1 顯示提交 commit 2 隱式提交,語句執行完成或正常 退出 執行失敗叫回滾 1 顯示回滾 rollback 2 運勢回...