Amazon Aurora在从节点上执行的只读事务中默认提供读一致性(read consistency),而不是串行化隔离。
读一致性保证从节点上的查询结果与主节点上的最新写操作是一致的,但并不保证从节点上的查询结果与其他从节点上的查询结果一致。
如果需要在从节点上执行的只读事务中提供串行化隔离,可以使用SELECT ... FOR UPDATE语句,该语句会获取行级锁,确保其他事务无法修改相关数据。
以下是一个示例代码:
import pymysql
# 创建连接
conn = pymysql.connect(
host='your-aurora-endpoint',
port=3306,
user='your-username',
password='your-password',
db='your-database',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
# 创建游标
with conn.cursor() as cursor:
# 开始事务
conn.begin()
try:
# 执行查询语句,并获取行级锁
cursor.execute('SELECT * FROM your_table WHERE column = %s FOR UPDATE', ('value',))
# 处理查询结果
result = cursor.fetchall()
# 提交事务
conn.commit()
# 处理查询结果
for row in result:
print(row)
except Exception as e:
# 回滚事务
conn.rollback()
raise e
finally:
# 关闭连接
conn.close()
在上述示例中,通过在查询语句中添加FOR UPDATE子句,从节点会获取行级锁,确保其他事务无法修改相关数据,从而实现了串行化隔离。