您的位置:首頁 > 教程 > Mysql/MariaDB > MySQLtransaction事務安全示例講解

MySQLtransaction事務安全示例講解

2022-06-18 12:09:16 來源:易采站長站 作者:

MySQLtransaction事務安全示例講解

目錄
事務安全 transaction事務基本原理自動事務手動事務事務的使用回滾點事務的特點

tn1站長之家-易采站長站-Easck.Com

事務安全>

事務 transaction 訪問可能更新數據庫中各種數據項的一個程序執行單元unittn1站長之家-易采站長站-Easck.Com

事務由事務開始(begin transaction)和事務結束(end transaction)之間執行的全體操作組成tn1站長之家-易采站長站-Easck.Com

tn1站長之家-易采站長站-Easck.Com

事務基本原理

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

事務通常是自動提交,也可以手動提交tn1站長之家-易采站長站-Easck.Com

tn1站長之家-易采站長站-Easck.Com

自動事務

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

兩個客戶端,一個客戶端執行SQL指令,另一個客戶端查看執行結果tn1站長之家-易采站長站-Easck.Com

通過變量控制自動事務tn1站長之家-易采站長站-Easck.Com

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

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

關閉自動事務之后,一個客戶端修改數據,另個一客戶端看不到修改的結果tn1站長之家-易采站長站-Easck.Com

一旦關閉自動事務,就需要用戶提供是否同步的命令tn1站長之家-易采站長站-Easck.Com

    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就可以看到新增的數據了tn1站長之家-易采站長站-Easck.Com

    通常不需要關閉自動事務,需要使用事務的時候,使用手動事務tn1站長之家-易采站長站-Easck.Com

    tn1站長之家-易采站長站-Easck.Com

    手動事務

    開始、過程、結束,都要用戶手動發送事務操作指令來實現tn1站長之家-易采站長站-Easck.Com

    手動事務指令tn1站長之家-易采站長站-Easck.Com

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

    tn1站長之家-易采站長站-Easck.Com

    事務的使用

    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;

    tn1站長之家-易采站長站-Easck.Com

    回滾點

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

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

    一個事務處理過程中,如果有很多步驟,可以設置多個回滾點tn1站長之家-易采站長站-Easck.Com

    tn1站長之家-易采站長站-Easck.Com

    事務的特點

    ACID:tn1站長之家-易采站長站-Easck.Com

      原子性>一致性 consistency 事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態隔離性 isolation 一個事務的執行,不能被其他事務干擾,操作數據的時候會鎖住該條數據持久性 durability 一個事務一旦提交,他對數據庫中的數據改變就是永久的

      如果條件中使用了索引,會隔離一條記錄;反之,通過全表檢索,會鎖定整個表tn1站長之家-易采站長站-Easck.Com

      到此這篇關于MySQL transaction事務安全示例講解 的文章就介紹到這了,更多相關MySQL transaction 內容請搜索易采站長站以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持易采站長站!tn1站長之家-易采站長站-Easck.Com

      如有侵權,請聯系QQ:279390809 電話:15144810328

相關文章

  • mysql 5.7.30安裝配置方法圖文教程

    mysql 5.7.30安裝配置方法圖文教程

    之前把服務器里面的MySQL卸了重裝,安裝mysql時未做總結,換新電腦,補上安裝記錄,安裝的時候,找了些網友的安裝記錄,發現好多坑 截個圖,作為筆記,也正好留給需要的朋友們。
    2019-01-03
  • MySQL5.6免安裝版環境配置圖文教程

    MySQL5.6免安裝版環境配置圖文教程

    MySQL是一個小巧玲瓏但功能強大的數據庫,目前十分流行。但是官網給出的安裝包有兩種格式,一個是msi格式,一個是zip格式的。很多人下了zip格式的解壓發現沒有setup.exe,面對一堆文
    2019-01-04
  • Linux下安裝mysql-8.0.20的教程詳解

    Linux下安裝mysql-8.0.20的教程詳解

    ** Linux下安裝mysql-8.0.20 ** 環境介紹 操作系統:CentOS 7 mysql下載地址:https://dev.mysql.com/downloads/mysql/ 下載版本:mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz 卸載mysql 查看是否安裝過mysql,命令:fin
    2020-05-24
  • linux環境下安裝mysql數據庫的詳細教程

    linux環境下安裝mysql數據庫的詳細教程

    1.安裝數據庫 1)yum -y install mysql-server(簡單) yum命令自動從網上尋找mysql服務資源,下載至本地并完成安裝 2)也可以自己在網上下載mysql服務,通過xftp傳輸至Linux系統,自己安裝(一般安
    2020-06-20
  • MySQL8.0.20安裝教程及其安裝問題詳細教程

    MySQL8.0.20安裝教程及其安裝問題詳細教程

    原文地址:https://blog.csdn.net/m0_46579864/article/details/105981304 官網下載MySQL的安裝包 1.下載鏈接如下: MySQL8.0.20版本 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-20.html 其他版本:MySQL8.0.16版本
    2020-05-10
  • MySQL對數據庫操作(創建、選擇、刪除)

    MySQL對數據庫操作(創建、選擇、刪除)

    MySQL 創建數據庫 我們可以在登陸 MySQL 服務后,使用 create 命令創建數據庫,語法如下: CREATE DATABASE 數據庫名; 以下命令簡單的演示了創建數據庫的過程,數據名為 RUNOOB: [root@host]# mysql
    2020-07-01
  • Linux系統MySQL8.0.19快速安裝配置教程圖解

    Linux系統MySQL8.0.19快速安裝配置教程圖解

    一、環境介紹 Linux系統使用yum安裝MySQL需要從網上下載MySQL的一系列組件,這個過程非常耗時且有下載中斷的可能,如果想要快速安裝MySQL,可以先在網上將MySQL的離線包下載下來傳到系
    2020-02-27
  • mysql 加了 skip-name-resolve不能鏈接數據庫問題的解決方法

    mysql 加了 skip-name-resolve不能鏈接數據庫問題的解決方法

    mysql 加了 skip-name-resolve不能鏈接的問題, 要確認 MySql 是否采用過主機名的授權 在 MySql Server 的配置文件 My.ini 中,增加如下兩行: [mysqld] skip-name-resolve 它將禁止 MySql Server 對外部連接進
    2019-01-04
色七七影院_香港三级台湾三级在线播放_男人放进女人阳道猛进猛出