MySQL中的事务, 特性及应用

事务

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

你可能感兴趣的:(DataBase,mysql,数据库)