当前位置: 首页 > news >正文

如何在 MySQL 中创建和使用事务?

目录

1. 环境准备

2. 创建事务

3. 事务执行

4. 事务撤消

5. 总结 


事务是数据库区别于文件系统的重要特征之一,当我们有了事务就会让数据库始终保持一致,同时我们还能通过事务机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。

以下是针对MYSQL中如何创建和使用事务的相关的介绍,SQL语句的执行可以使用MySQL Workbench或SQLynx来执行,以下是使用SQLynx执行的截图。(如何安装MySQL和SQLynx的步骤不在此文中介绍,如有需要,可搜索相关的产品网上进行安装)

1. 环境准备

a. 创建users的表,此表包含两个字段 nameemail,建表语句如下:

CREATE TABLE `users` (`name` varchar(100) DEFAULT NULL,`email` varchar(100) DEFAULT NULL
) 

b. 执行以上语句,创建users表,执行成功后如下图所示:

2. 创建事务

a. 打开保持连接的选项,只有保持连接,当前的事务才能按代码行执行。

b. 首先需要使用“START TRANSACTION”语句启动事务。以下是示例:

START TRANSACTION;INSERT INTO users (name, email) VALUES ('John Doe', 'johndoe@example.com');

在此示例中,使用 START TRANSACTION 语句启动了一个新事务。

c. 检查事务执行的结果

1)在当前的连接1中,可以查看到数据执行的结果,如下图:

2)打开一个新的连接2,再次执行查询的语句,可以看到,在表中没有数据:

3. 事务执行

接下来的语句(insert )在该事务内执行。

下一步是提交更改以确保它们是永久的。我们通过在查询中包含 COMMIT 语句来实现这一点。

START TRANSACTION;INSERT INTO users (name, email) VALUES ('John Doe', 'johndoe@example.com');
COMMIT;

在上述新的连接2中,再次查询数据结果,发现数据已经永久保存到表中并能查询出来:

4. 事务撤消

如果事务期间偶然出现错误,并且您想要撤消更改,则可以使用 ROLLBACK 语句。然后事务将被回滚,并且不会执行插入和更新语句。这意味着数据库中不会发生任何更改。

START TRANSACTION;INSERT INTO users (name, email) VALUES ('John Doe', 'johndoe@example.com');
ROLLBACK;

5. 总结 

MySQL一个事务中执行多个操作时,要么所有的事务都被提交(commit),要么这些修改永久地保存下来,要么书库管理系统将放弃所有的修改,整个事务回滚(rollback)到最终状态。

事务对于MySQL在业务生产系统中的作用非常重要,以上示例主要显示的数据的隔离性。当多条数据同时执行的时候,事务会保证业务执行同时成功或同时失败,这样使用有关联性的业务可以保持业务的一致性。

相关文章:

  • 一文读懂数据仓库ODS层
  • 外贸SEO工具有哪些推荐?
  • Unity URP下通过相机让部分Render不受后处理渲染
  • 前端模糊搜索关键字高亮
  • Dubbo3 服务原生支持 http 访问,兼具高性能与易用性
  • android Switch/case with R.id.XXXX in android doesn‘t work 错误: 需要常量表达式解决方案
  • 在超线程CPU上切换到另一个线程
  • 在Android中管理内存
  • 使用 Selenium 自动化获取 CSDN 博客资源列表详解
  • AI在创造还是毁掉音乐?
  • PS系统教学24
  • 如何使用AI解决所有EXCEL公式问题
  • Origin电源维修高压发生器GEXUS-3 GEXUS-15R-02U
  • java基于ssm+jsp 高校二手交易平台
  • React useReducer 使用及 useImmerReducer
  • Android 架构优化~MVP 架构改造
  • Hibernate【inverse和cascade属性】知识要点
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript创建对象的四种方式
  • JS笔记四:作用域、变量(函数)提升
  • JWT究竟是什么呢?
  • Meteor的表单提交:Form
  • mysql中InnoDB引擎中页的概念
  • Node项目之评分系统(二)- 数据库设计
  • October CMS - 快速入门 9 Images And Galleries
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 模型微调
  • 普通函数和构造函数的区别
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 阿里云移动端播放器高级功能介绍
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #{}和${}的区别?
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (转)人的集合论——移山之道
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net wcf memory gates checking failed
  • .NET 使用 XPath 来读写 XML 文件
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • @Not - Empty-Null-Blank
  • [Algorithm][动态规划][简单多状态DP问题][按摩师][打家劫舍Ⅱ][删除并获得点数][粉刷房子]详细讲解
  • [android] 天气app布局练习
  • [C#基础]说说lock到底锁谁?
  • [C++]运行时,如何确保一个对象是只读的
  • [Codeforces] number theory (R1600) Part.11
  • [CP_AUTOSAR]_系统服务_DEM模块(一)功能及模块间依赖关系介绍