如何修复 mysql select 命令在另一个数据库连接更新后给出错误结果?

How to fix mysql select command giving wrong result after the update in another db connection?

我使用 python MySQLdb 模块建立了两个 mysql 数据库连接,即 dbdb1。第一个连接用于读取 table,第二个连接用于更新 table。 以下是我使用过的代码序列。

1 : 使用 db 连接从用户 table 读取 ID;当前值 'Y'

2:使用 db1 连接将用户 table 中的 ID 更新为 'N'。

3:使用 db 连接从用户 table 读取 ID。但是此时它给值'Y'。

import MySQLdb

db = MySQLdb.connect("localhost","root","test007","db",charset='')

apikey="123"


cursor=db.cursor()                                             ## fetching no. of data received in valid time range
cursor.execute("select id from USER where apikey=%s",(apikey,))
data=cursor.fetchone()
cursor.close()
print data #current value 'Y'

db1 = MySQLdb.connect("localhost","root","test007","db",charset='')

cursor=db1.cursor()                                             ## fetching no. of data received in valid time range
cursor.execute("update USER set id='N' where apikey=%s",(apikey,))
db1.commit()
cursor.close()
db1.close()

cursor=db.cursor()                                             ## fetching no. of data received in valid time range
cursor.execute("select id from USER where apikey=%s",(apikey,))
data=cursor.fetchone()
cursor.close()
print data
db.close()

在第 3 步中,它没有显示更新后的值。为什么会这样?如何在不关闭连接 db 的情况下解决此问题,并在更新后使用另一个连接读取 table?

这不是实际的代码实现。 db1 实际上是来自其他文件的 运行。为了简单起见,我只展示了这个。

它正在做它应该做的事情。 REPEATABLE-READ 意味着您看到相同的数据,而不管其他事务中发生了什么。当然,这只会持续到您的交易终止。

当您开始交易时,可以将其视为对整个数据集进行快照。然后,你所做或看到的一切 (SELECT) 都会及时冻结。

要么更改为 READ-UNCOMMITTED,要么将 SELECTs 拆分为单独的交易。