1 事务是什么?
事务就是一个或多个数据库操作, 且这些操作需要保证 原子性, 一致性, 隔离性, 持久性
注: MySQL 默认开启事务自动提交模式, 即除非显式的开启事务(BEGIN 或 START TRANSACTION), 否则每条 SOL 语句都会被当做一个单独的事务自动执行。
2 事务的四大特性(ACID)
- 原子性(Atomicity): 事务所包含的所有操作要么全部成功, 要么全部失败
- 一致性(Consistency): 事务 开始前 和 结束后, 数据的完整性没有被破坏
- 比如 A向 B 转账,A和B的账户余额之和应该是不变的
- 比如 A向 B 转账,A和B的账户余额之和应该是不变的
- 隔离性(Isolation): 多个事务并发执行时, 事务内部的操作与其它事务是隔离的
- 持久性(Durability): 事务一旦被提交, 对数据库的改变是永久的, 即便系统故障也不会丢失提交事务的操作
3 事务的使用
在使用事务之前,先要确保表的存储引擎是 InnoDB 类型, 只有这个类型才可以使用事务,MySQL数据库中表的存储引擎默认是 InnoDB 类型。
(表的存储引擎: 提供存储数据一种机制,不同表的存储引擎提供不同的存储机制。)
说明:
- 常用的表的存储引擎是 InnoDB 和 MyISAM
- 修改存储引擎:
alter table students engine = 'MyISAM'
- 修改存储引擎:
- InnoDB 是支持事务的
- MyISAM 不支持事务,优势是访问速度快,对事务没有要求或者以select、insert为主的都可以使用该存储引擎来 ```python 事务开头 开启事务: begin;
事务 …
事务结尾
提交事务: commit; 或 回滚事务: rollback;
```
注:
begin开启后不会自动提交事务, 和set autocommit=0类似,
不同之处在于,
set autocommit=0之后都要commit (但关闭终端后又会恢复set autocommit=1);
而begin之后只等待一次commit, 之后又恢复为自动提交
4 pymysql中的事务
pymysql默认支持事务,在执行sql语句之前自动begin
提交事务: conn.commit()
回滚事务: conn.rollback()