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

目录

[1. 环境准备](#1. 环境准备)

[2. 创建事务](#2. 创建事务)

[3. 事务执行](#3. 事务执行)

[4. 事务撤消](#4. 事务撤消)

[5. 总结](#5. 总结)


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

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

1. 环境准备

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

sql 复制代码
CREATE TABLE `users` (
  `name` varchar(100) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL
) 

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

2. 创建事务

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

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

language-mysql 复制代码
START TRANSACTION;
    INSERT INTO users (name, email) VALUES ('John Doe', 'johndoe@example.com');

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

c. 检查事务执行的结果

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

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

3. 事务执行

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

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

language-mysql 复制代码
START TRANSACTION;
    INSERT INTO users (name, email) VALUES ('John Doe', 'johndoe@example.com');
COMMIT;

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

4. 事务撤消

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

language-mysql 复制代码
START TRANSACTION;
    INSERT INTO users (name, email) VALUES ('John Doe', 'johndoe@example.com');
ROLLBACK;

5. 总结

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

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

相关推荐
洛克大航海1 小时前
解锁 PySpark SQL 的强大功能:有关 App Store 数据的端到端教程
linux·数据库·sql·pyspark sql
XueminXu3 小时前
ClickHouse数据库的表引擎
数据库·clickhouse·log·表引擎·mergetree·special·integrations
冒泡的肥皂3 小时前
MVCC初学demo(二
数据库·后端·mysql
代码程序猿RIP3 小时前
【Redis 】Redis 详解以及安装教程
数据库·etcd
小生凡一3 小时前
redis 大key、热key优化技巧|空间存储优化|调优技巧(一)
数据库·redis·缓存
oe10193 小时前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(上)
数据库·笔记·语言模型·agent·上下文工程
小马哥编程3 小时前
【软考架构】案例分析-对比MySQL查询缓存与Memcached
java·数据库·mysql·缓存·架构·memcached
一 乐3 小时前
高校后勤报修系统|物业管理|基于SprinBoot+vue的高校后勤报修系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·毕设
折翼的恶魔4 小时前
SQL190 0级用户高难度试卷的平均用时和平均得分
java·数据库
煎蛋学姐4 小时前
SSM基于框架在线电影评论投票系统3gr0f(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·系统开发·ssm 框架·在线电影评论投票系统