MySQL和JDBC處理事務

2021-10-04 19:32:52 字數 4499 閱讀 8471

在預設情況下,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 運勢回...