您的位置:首页 > 教程 > 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