1 事务是什么?

事务就是一个或多个数据库操作, 且这些操作需要保证 原子性, 一致性, 隔离性, 持久性

注: MySQL 默认开启事务自动提交模式, 即除非显式的开启事务(BEGIN 或 START TRANSACTION), 否则每条 SOL 语句都会被当做一个单独的事务自动执行。

2 事务的四大特性(ACID)

  • 原子性(Atomicity): 事务所包含的所有操作要么全部成功, 要么全部失败
  • 一致性(Consistency): 事务 开始前 和 结束后, 数据的完整性没有被破坏
    • 比如 A向 B 转账,A和B的账户余额之和应该是不变的
  • 隔离性(Isolation): 多个事务并发执行时, 事务内部的操作与其它事务是隔离的
  • 持久性(Durability): 事务一旦被提交, 对数据库的改变是永久的, 即便系统故障也不会丢失提交事务的操作

3 事务的使用

在使用事务之前,先要确保表的存储引擎是 InnoDB 类型, 只有这个类型才可以使用事务,MySQL数据库中表的存储引擎默认是 InnoDB 类型。
(表的存储引擎: 提供存储数据一种机制,不同表的存储引擎提供不同的存储机制。)
image.png
说明:

  • 常用的表的存储引擎是 InnoDB 和 MyISAM
    • 修改存储引擎: alter table students engine = 'MyISAM'
  • InnoDB 是支持事务的
  • MyISAM 不支持事务,优势是访问速度快,对事务没有要求或者以select、insert为主的都可以使用该存储引擎来 ```python 事务开头 开启事务: begin;

事务 …

事务结尾 提交事务: commit; 或 回滚事务: rollback; ``` image.png
注:
begin开启后不会自动提交事务, 和set autocommit=0类似,
不同之处在于,
set autocommit=0之后都要commit (但关闭终端后又会恢复set autocommit=1);
而begin之后只等待一次commit, 之后又恢复为自动提交

4 pymysql中的事务

pymysql默认支持事务,在执行sql语句之前自动begin
提交事务: conn.commit()
回滚事务: conn.rollback()