gpt4 book ai didi

mysql - AWS lambda 处理程序和 MySQL 数据库。第一个客户端连接插入的行对第二个客户端连接不可见

转载 作者:行者123 更新时间:2023-11-29 20:36:58 26 4
gpt4 key购买 nike

我无法理解为什么第一个 AWS lambda 函数(在 Python 中)插入的值对另一个 AWS lambda 函数(使用不同的 MySql 客户端连接)不可见。这是我正在做的事情:

处理程序A:

conn = DBConnectionFactory.create()
// conn.thread_id() returns X

处理程序 B:

conn = DBConnection.instance()
// conn.thread_id() returns Y

处理程序A:

with conn.cursor() as cursor:
cursor.execute("INSERT INTO my_table (id, ...) VALUES ('myid', ...)")
conn.commit()

然后我使用命令行检查新行是否已正确插入 --> 确定

处理程序 B:

// client B 
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM my_table WHERE id = 'myid'");

这里最后一个查询不返回新创建的行。为什么 ?但是,如果我使用与处理程序 B 的新连接,它就可以工作

处理程序 B:

conn = DBConnection.instance()
// conn.thread_id() returns Z
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM my_table WHERE id = 'myid'");
// OK the row is found !!
<小时/>

我已经使用本地数据库进行了本地测试,并且运行良好:

conn1 = DBConnectionFactory.create();
conn2 = DBConnectionFactory.create();

with conn2.cursor() as cursor:
cursor.execute("INSERT INTO my_table (id, ...) VALUES(X, ...)")
conn2.commit()

with conn1.cursor() as cursor:
cursor.execute('SELECT * FROM my_table WHERE id = X')
print(cursor.rowcount) // OK working I have 1 row

最佳答案

这可能是因为事务隔离。

如果您在 A 插入之前从 B 中的数据库中读取某些内容,则 B 使用 A 插入(并提交)之前的数据库状态(快照),并且即使在 A 提交之后也会继续读取此快照。

https://dev.mysql.com/doc/refman/5.7/en/innodb-consistent-read.html

             Session A              Session B    
time
| SELECT * FROM t;
| empty set
| INSERT INTO t VALUES (1, 2);
|
v SELECT * FROM t;
empty set
COMMIT;

SELECT * FROM t;
empty set

COMMIT;

SELECT * FROM t;
---------------------
| 1 | 2 |
---------------------

请注意,我假设您在 A 插入+提交之前正在读取 B 中的某些内容。我看不到你的完整来源,所以我不知道这是否属实,但我认为很可能是:)

在 B 中提交/回滚事务,然后 B 应该看到 A 插入的行。

# client B 
conn.rollback() # or conn.commit()
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM my_table WHERE id = 'myid'")

此行为还取决于隔离级别设置。

关于mysql - AWS lambda 处理程序和 MySQL 数据库。第一个客户端连接插入的行对第二个客户端连接不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38761904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com