当我使用 TiDB 时,我发现当我同时运行两个事务时很奇怪。我期望得到与 MySQL 一样的值 2,但我得到的只是 0、2、0、2、0、2 ......
对于这两个数据库,tx_isolation 都设置为“read-committed”。所以 select 语句返回 2 是合理的,因为它已经提交了。
这是测试代码:
for i in range(10):
conn1 = mysql.connector.connect(host='',
port=4000,
user='',
password='',
database='',
charset='utf8')
conn2 = mysql.connector.connect(host='',
port=4000,
user='',
password='',
database='',
charset='utf8')
cur1 = conn1.cursor()
cur2 = conn2.cursor()
conn1.start_transaction()
conn2.start_transaction()
cur2.execute("update t set b=%d where a=1" % 2)
conn2.commit()
cur1.execute("select b from t where a=1")
a = cur1.fetchone()
print(a)
cur1.execute("update t set b=%d where a=1" % 0)
conn1.commit()
cur1.close()
cur2.close()
conn1.close()
conn2.close()
表 t 是这样创建的:
CREATE TABLE `t` (
`a` int(11) NOT NULL AUTO_INCREMENT,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`a`)
)
和 (1,0) 最初被插入。