91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL?transaction事務安全怎么實現

發布時間:2022-06-18 13:55:24 來源:億速云 閱讀:108 作者:iii 欄目:開發技術

這篇文章主要介紹“MySQL transaction事務安全怎么實現”,在日常操作中,相信很多人在MySQL transaction事務安全怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL transaction事務安全怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

事務安全 transaction

事務 transaction 訪問可能更新數據庫中各種數據項的一個程序執行單元unit

事務由事務開始(begin transaction)和事務結束(end transaction)之間執行的全體操作組成

事務基本原理

MySQL允許將事務統一進行管理(存儲引擎innodb),將用戶所做的操作,暫時保存起來,不直接放到數據表(更新),等到用戶確認結果之后再進行操作

事務通常是自動提交,也可以手動提交

自動事務

當客戶端發送一條SQL指令(寫操作,增刪改)給服務器的時候,服務器在執行后,不用等待用戶反饋結果,會自動將結果同步到數據表

兩個客戶端,一個客戶端執行SQL指令,另一個客戶端查看執行結果

通過變量控制自動事務

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
-- 關閉自動事務
set autocommit = off;

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+

關閉自動事務之后,一個客戶端修改數據,另個一客戶端看不到修改的結果

一旦關閉自動事務,就需要用戶提供是否同步的命令

  • commit 提交 (同步到數據表,事務會被清空)

  • rollback 回滾 (清空之前的操作,不要了)

-- 客戶端A關閉自動事務后操作數據
mysql> select * from my_class;
+----+--------+
| id | name   |
+----+--------+
|  1 | 一班   |
|  3 | 三班   |
+----+--------+
2 rows in set (0.01 sec)
mysql> insert into my_class (name) values('四班');
Query OK, 1 row affected (0.00 sec)

mysql> select * from my_class;
+----+--------+
| id | name   |
+----+--------+
|  1 | 一班   |
|  3 | 三班   |
|  5 | 四班   |
+----+--------+
3 rows in set (0.00 sec)
-- 客戶端B看不到新增的 四班數據, 
mysql> select * from my_class;
+----+--------+
| id | name   |
+----+--------+
|  1 | 一班   |
|  3 | 三班   |
+----+--------+
2 rows in set (0.00 sec)

客戶端A執行commit 提交事務之后,客戶端B就可以看到新增的數據了

通常不需要關閉自動事務,需要使用事務的時候,使用手動事務

手動事務

開始、過程、結束,都要用戶手動發送事務操作指令來實現

手動事務指令

-- 1、開啟事務,從這條語句開始,后面所有的語句都不會直接寫入到數據表,保存在事務日志中
start transaction 
-- 2、事務處理,多個指令構成
-- 3、事務提交,結束事務
commit / rollback

事務的使用

mysql> select * from my_class;
+----+--------+
| id | name   |
+----+--------+
|  1 | 一班   |
|  3 | 三班   |
|  5 | 四班   |
+----+--------+
3 rows in set (0.04 sec)
mysql> select * from my_student;
+----+--------+----------+------+--------+
| id | name   | class_id | age  | gender |
+----+--------+----------+------+--------+
|  1 | 劉備   |        1 |   18 |      2 |
|  2 | 李四   |        1 |   19 |      1 |
|  3 | 王五   |     NULL |   20 |      2 |
|  4 | 張飛   |     NULL |   21 |      1 |
|  5 | 關羽   |     NULL |   22 |      2 |
|  6 | 曹操   |        1 |   20 |   NULL |
+----+--------+----------+------+--------+
6 rows in set (0.00 sec)
-- 開啟事務
start transaction;
-- 執行事務操作,多個修改操作
insert into my_class (name)values ('六班');
insert into my_student (name, class_id, age, gender)values ('司馬懿', 6, 26, 1);
-- 提交事務
commit;
-- 或者回滾操作,所有數據無效清空
rollback;

回滾點

當有一系列事務操作是,而其中的步驟如果成功了,沒有必要重新來過,可以在某個點,設置一個記號(回滾點),然后如果后面有失敗,那么可以回到這個記號的位置

-- 增加回滾點
savepoint 回滾點名字;
-- 回到回滾點 清空之后所有操作
rollback to 回滾點名字;

一個事務處理過程中,如果有很多步驟,可以設置多個回滾點

事務的特點

ACID:

  • 原子性 automicity 一個事務是不可分割的工作單元,要么都做,要么都不做

  • 一致性 consistency 事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態

  • 隔離性 isolation 一個事務的執行,不能被其他事務干擾,操作數據的時候會鎖住該條數據

  • 持久性 durability 一個事務一旦提交,他對數據庫中的數據改變就是永久的

如果條件中使用了索引,會隔離一條記錄;反之,通過全表檢索,會鎖定整個表

到此,關于“MySQL transaction事務安全怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

井冈山市| 红原县| 冀州市| 郴州市| 三明市| 启东市| 九龙城区| 屏东县| 陵川县| 札达县| 平顶山市| 德惠市| 江达县| 图们市| 任丘市| 广安市| 清徐县| 青冈县| 通城县| 京山县| 民权县| 东莞市| 襄樊市| 崇州市| 玉溪市| 合山市| 古丈县| 滁州市| 六安市| 阿合奇县| 承德县| 丰原市| 彝良县| 连云港市| 延寿县| 望谟县| 泰州市| 山丹县| 漳州市| 祁东县| 罗城|