mysql - 如何修复在另一个数据库连接中更新后给出错误结果的 mysql select 命令?
问题描述
我已经使用 python MySQLdb 模块进行了两个 mysql db 连接,db
即db1
. 第一个连接用于读取表,第二个连接用于更新表。以下是我使用的代码序列。
1:使用连接从用户表中读取id db
;当前值“Y”
2:使用连接将用户表中的 id 更新为“N” db1
。
db
3:使用连接从用户表中读取 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
并在更新后使用另一个连接来读取表的情况下解决此问题?
这不是实际的代码实现。db1 实际上是从其他文件运行的。为简单起见,我只是展示了这一点。
解决方案
它正在做它应该做的事情。 REPEATABLE-READ
意味着您看到相同的数据,而不管其他事务中发生了什么。当然,这只会持续到您的交易终止。
可以将其视为在您开始事务时拍摄整个数据集的快照。然后,你所做或看到的一切 ( SELECT
) 都会被及时冻结。
要么更改为单独的事务,要么将其READ-UNCOMMITTED
分解SELECTs
为单独的事务。
推荐阅读
- java - 使用 oracle JDBC 驱动程序打印 PrepareStatement
- android - ArrayList.add 不适用于 AsyncTask
- phpstorm - 为什么我无法在 PhpStorm 中保存数据
- php - 如何将数组变成更小的数组?在php中
- reactjs - 在没有状态reactjs的列表中交换元素
- python - 'SELECT LAST_INSERT_ID()' 处的语法错误
- javascript - “$.extend({}, options)” 可以在 JQuery 中使用“委托”功能吗?
- android - 访问 Google fit 可以在本地测试应用程序中使用,但不能通过 Google Play
- vb.net - 用户代码的参数处理异常
- blockchain - 是否可以从以太坊的另一个账户支付交易费用?