MySQL transaction事务安全示例讲解

目录
  • 事务安全 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事务安全示例讲解 的文章就介绍到这了,更多相关MySQL transaction 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql Non-Transactional Database Only(只支持MyISAM)

    后来在做WordPress,一开始还不知道原来WordPress用的是InnoDB数据引擎,于是在原来的数据库里面就建了一个数据库,一开始也没发觉问题,安装,导入sql,都没问题,当时也没多想.直到这几天因为又要装多一个WordPress,用phpmyadmin访问数据库多一点,问题来了.老是一访问WordPress的数据库,就弹出错误提示"Mysqld-nt.exe应用程序错误:"0x005346c4"指令引用的"0x00786000"内存,该内存不能为

  • mysql报错:Deadlock found when trying to get lock; try restarting transaction的解决方法

    发现问题 最近在补以前数据的时候程序突然报如下错误: [2017-02-10 13:12:06.678] [INFO] mysqlLog - update tbl_playerdata_error: { [Error: ER_LOCK_DEADLOCK: Deadlock found when trying to get lock; try restarting transaction] code: 'ER_LOCK_DEADLOCK', errno: 1213, sqlState: '4000

  • MySQL数据库事务隔离级别介绍(Transaction Isolation Level)

    数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 复制代码 代码如下: #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. [mysqld] transaction-isolation = REPEATABLE-READ 这里全局默认是REPEATABLE-READ,其实MySQL本来默认也是这个级别

  • MySQL数据库事务transaction示例讲解教程

    目录 1.什么是事务? 2.和事务相关的语句只有这3个DML语句:insert.delete.update 3.假设所有的业务都能使用1条DML语句搞定,还需要事务机制吗? 4.事务的原理 5.事务的四大特性:ACID 6.关于事务之间的隔离性 1)第一级别:读未提交(read uncommitted) 2)第二级别:读已提交(read committed) 3)第三级别:可重复读(repeatable read) 4)第四级别:序列化读/串行化读(serializable) 7.演示事务的隔离

  • MySQL transaction事务安全示例讲解

    目录 事务安全 transaction 事务基本原理 自动事务 手动事务 事务的使用 回滚点 事务的特点 事务安全 transaction 事务 transaction 访问可能更新数据库中各种数据项的一个程序执行单元unit 事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成 事务基本原理 MySQL允许将事务统一进行管理(存储引擎innodb),将用户所做的操作,暂时保存起来,不直接放到数据表(更新),等到用户确认结果之后再

  • MySQL数据分析存储引擎示例讲解

    目录 1.引入案例 2.查看系统默认的存储引擎和默认字符集 3.常见的存储引擎 1)MyISAM:不支持事务.(张马虎) MyISAM的优缺点: 2)InnoDB:支持事务.(李小心) InnoDB的优缺点: 3)MEMORY(这个了解一下就行了) MEMORY的优缺点: 4.下面这张图了解就行 今天我们来说说MySQL存储引擎,作为从事数据分析行业的朋友老说,我们不必细究MySQL存储引擎到底什么,我们了解就行了. 1.引入案例 有张马虎.李小心两个人,都是地铁口的自行车管理员,每天都有很多人

  • MySQL数据库约束操作示例讲解

    目录 一.约束是什么 二.约束的具体操作 Not NULL UNIQUE 约束的组合使用 PRIMARY KEY DEFAULT FOREIGN KEY 一.约束是什么 约束就是,在创建表的时候,对表设置一些规则,只有满足这些规则,才可以插入数据,我们把这些规则叫做约束 常见的约束有: 约束类型 规则 Not Null 指定某列不能存储NULL值 UNIQUE 保证某列的每行必须有唯一的值 DEFAULT 给没有赋值的列赋默认值 PRIMARY KEY Not NULL 与 UNIQUE的结合,

  • MySql的事务使用与示例详解

    在MySQL中,事务就是一个逻辑工作单元的一系列步骤.事务是用来保证数据操作的安全性. 事务的特征: 1.Atomicity(原子性) 2.Consistency(稳定性,一致性) 3.Isolation(隔离性) 4.Durability(可靠性) 注:事务只针对对数据数据产生影响的语句有效. show engines //查看mysql锁支持的数据引擎 MyISAM不支持事物,InnoDB支持事物 默认情况下,MySQL将以自动提交模式运行,这意味着没一条小命令都将当做一个只有一条命令的事物

  • MySQL数据管理操作示例讲解

    目录 外键 DML语言 添加 insert 修改 update 删除 delete 外键 方式一:在创建表的时候,增加约束 删除有外键的表的时候,要先删除引用外键的表 物理外键:不建议使用,数据库级别的外键,不建议使用!(避免数据库过多造成困扰) 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段) 我们想使用多张表的数据,想使用外键,用程序去实现即可 DML语言 数据库的意义:数据管理,数据存储 DML语言:数据操作语言 insert  update  delete 添加 insert

  • RocketMQ事务消息图文示例讲解

    RocketMQ 也允许我们像mysql 一样发送具有事务特征的消息 MQ 的事务流程(本地代码正常执行) MQ 的消息补偿过程(当本地代码执行失败时) MQ 消息的三种状态 提交状态:允许进入队列,此消息与非事务消息无区别 回滚状态:不允许进入队列,此消息等同于未发送过 中间状态:完成了 half 消息的发送,未对 MQ 进行二次状态确认(未知状态) 注意:事务消息仅与生产者有关,与消费者无关 生产者代码(提交状态.回滚状态): public class Producer { public s

  • jq.ajax+php+mysql实现关键字模糊查询(示例讲解)

    对于这个功能企业上还算比较实用,推荐给大家: index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <style> *{margin:0;padding:0;} .text{width:200px;height:30px;line-height:30px;font-size:14px;outline:none;} ul{wid

  • Android连接MySQL数据库并进行增删改查操作示例讲解

    1.Android 连接MySQL数据库 public class DBOpenHelper { private static String driver = "com.mysql.jdbc.Driver";//MySQL 驱动 private static String url = "jdbc:mysql://IP:3306/数据库";//MYSQL数据库连接Url private static String user = "root";//用

  • MySQL示例讲解数据库约束以及表的设计

    目录 数据库约束 not null unique default primary key 主键 foreign key 外键 check 表的设计 一对一 一对多 多对多 数据库约束 not null 指定某列的存储不能为null值 create table student (id int not null,name varchar(20)); Query OK, 0 rows affected (0.01 sec) mysql> desc student; +-------+---------

随机推荐