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;
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()