事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务是为了保证数据的一致性。比如银行转账,假如有A、B两个账户,从A账户转100元给B账户至少需要两次数据库修改操作,即A账户余额减少100元和B账户余额增加100元。如过在这过程中发生了一些意外,比如断电断网等,导致A账户余额减少后,B账户无法增加余额,那么A账户就不应该减少100元,在生活中的例子就是转账失败,存款退回原账户。如果没有事务,在执行A账户余额减少后程序意外终止(如宕机或者系统资源不足等),导致A账户白白损失了100元,这显然是不可接受的。有了事务,就能保证这两项操作要么都完成,要么都不能完成。
数据库事务有四个特性,习惯上称之为ACID特性:
1、原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部执行,要么都不执行
2、一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据满足完整性约束。
3、隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响另一个事务的执行。
4、持久性(Durability):已被提交的事务对数据库的修改应永久保存在数据库中。
#事务
import pymysql
host = 'localhost'
username = 'test'
password = 'test'
db_name = 'test'
connect = pymysql.connect(host, username, password, db_name)
cursor = connect.cursor()
#正确的sql语句
insert_sql1 = 'insert into users(name, age) values ("", 1)'
#错误的sql语句
insert_sql2 = 'insert into users(name, age) values (1)'
try:
cursor.execute(insert_sql1)
cursor.execute(insert_sql2)
#执行成功提交数据
connect.commit()
except Exception as e:
#执行失败回滚数据
connect.rollback()
print('执行失败!数据已成功回滚!')