事务
1 )概述
- 只有
innodb
引擎支持事务,myisam
是不支持的 - 事务的本质是原子性操作,不可分割,打包多个操作成为一个原子
2 )事务的四大特性(ACID)
- 原子性
Atomicity
- 原子性是指事务包含的所有操作不可分割
- 要成功一起;要失败也是一起,并且失败会回滚
- 一致性
Consistency
- 执行的前后数据的完整性保持一致
- 隔离性
Isolation
- 一个事务执行的过程中,不应受到其他事务的干扰
- 持久性
Durability
- 事务一旦结束,数据就持久到数据库中
3 ) SQL 应用示例
创建 users 表
create table `users`(`id` int(11) not null auto_increment primary key,`name` varchar(32) default null,`amount` int(11) default null
) engine=innodb default charset=utf8;
进行事务处理
select * from users;begin; -- 开启事务
-- start transaction; -- 这个和 begin 都是开启事务,二者取其一
update users set amount=amount-2 where id=1; -- 执行操作1
update users set amount=amount+2 where id=2; -- 执行操作2
commit; -- 提交事务
-- rollback; -- 回滚事务 与上面 二者取其一,不同场景使用select * from users;
python 示例
import pymysql;conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='xxxxxxx', charset='utf8', db='userdb')
cursor = conn.cursor()# 开启事务
conn.begin()try:cursor.execute('update users set amount=1 where id = 1')# ... 其他操作cursor.execute('update tran set amount=2 where id = 2')
except Exception as e:# 回滚print('回滚')conn.rollback()
else:# 提交print('提交')conn.commit()
cursor.close()
conn.close()