MySQL高级之事务篇

本文详细介绍了MySQL中的事务,包括事务的原子性、一致性、隔离性和持久性四大特性。讲解了隐式和显式事务的操作,以及savepoint关键字的使用。重点讨论了四种隔离级别:读未提交、读已提交、可重复读和串行化,通过实例展示了不同隔离级别下可能出现的脏读、不可重复读和幻读现象。最后,强调了选择合适隔离级别的重要性,需要根据业务需求平衡并发性和数据一致性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1.什么是事务

数据库中的事务是指对数据库执行一批操作,在同一个事务当中,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。

  • 事务是一个原子操作。是一个最小执行单元。可以甶一个或多个SQL语句组成
  • 在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。

举个例子:用户张三向用户李四转账500元。

如果在事务的支持下,上面最终只有2种结果:

  • 有事务支持:张三转账成功,账户扣减500,李四账户增加500;张三和李四账号均没有发送变化。

  • 无事务支持:可能出现张三账户扣减了500,此时系统挂了,导致李四账户没有入账500,而张三凭空少了500。

2.事务特性

  • 原子性(Atomicity):事务是一个原子性质的操作单元,事务里面的对数据库的操作要么都执行,要么都不执行。
  • 一致性(Consistency):在事务开始之前和完成之后,数据都必须保持一致状态,必须保证数据库的完整性。也就是说,数据必须符合数据库的规则。
  • 隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性(Durability):持久性也成为永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久的。

3.MySQL事务操作

MySQL中事务默认是隐式事务,执行insert、update、delete操作的时候,数据库自动开启事务、提交或回滚事务。是否开启隐式事务是由变量autocommit控制的。所以事务分为隐式事务显式事务

3.1.隐式事务

事务自动开启、提交或回滚,比如insert、update、delete语句,事务的开启、提交或回滚由MySQL内部自动控制的。

查看变量autocommit是否开启了自动提交:

mysql> show variables like 'autocommit';

autocommit为ON表示开启了自动提交。

3.2.显示事务

事务需要手动开启、提交或回滚,由开发者自己控制。

准备演示数据,创建数据库:

mysql> create table t_test (id int);
Query OK, 0 rows affected (0.01 sec)

mysql> select * from t_test;
Empty set (0.00 sec)

2种方式手动控制事务:

  • 方式一:

示例一:提交事务操作

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_test values(1);
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_test;
+------+
| id  |
+------+
|   1 |
+------+
1 row in set (0.00 sec)

示例二:回滚事务操作

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_test values(2);
Query OK, 1 row affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_test;
+------+
| id  |
+------+
|   1 |
+------+
1 row in set (0.00 sec)
  • 方式二:

autocommit还原回去:

mysql> set autocommit=1;
Query OK, 0 rows affected (0.00 sec)

示例一:提交事务操作

mysql> select * from t_test;
+------+
| id  |
+------+
|   1 |
+------+
1 row in set (0.00 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_test values (2);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_test values (3);
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_test;
+------+
| i
  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
宋红康MySQL高级课件是一套以MySQL数据库为主题的高级教学材料。本课件由宋红康编写,旨在提供深入理解和学习MySQL高级特性的知识。下面是对该课件的简介: 该课件分为多个章节,内容涵盖了MySQL高级应用和技巧。首先,课程将回顾MySQL基础知识,包括数据库设计、表的创建和管理以及基本的SQL查询语句。然后,课程将深入剖析MySQL高级特性,包括存储过程、触发器、事务和并发控制等方面的知识。 对于存储过程,课程将介绍如何创建和使用存储过程,以及存储过程的参数和返回值的使用。同时,课程还会详细讲解存储过程的语法和常见应用场景,帮助学习者更好地掌握和应用存储过程。 在触发器的部分,课程将解释触发器的概念和工作原理,并且演示如何创建和使用触发器。同时,课程还将分享触发器在实际项目中的常见应用,帮助学习者理解并运用触发器。 针对事务和并发控制,课程将讲解事务的定义、特性和隔离级别,并演示如何使用事务保证数据的完整性。课程还将介绍并发控制的原理和技术,包括锁和多版本并发控制(MVCC)等,以提高数据库的并发性和性能。 此外,课程还将介绍MySQL高级优化技巧,包括索引优化、查询优化和存储引擎选择等。学习者将在课程中学会如何通过合理设计和优化数据库结构来提升系统的性能和可扩展性。 总而言之,宋红康MySQL高级课件是一套系统、全面的MySQL高级教学材料,内容丰富、深入,将帮助学习者深入理解和应用MySQL高级特性,提升数据库应用开发和管理的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值