我搜索过,似乎找不到任何东西。
情况如下:
1。)用户1登录数据库。是SELECT * FROM v
;
2。)用户2登录到同一个数据库并执行INSERT INTO t1 VALUES(1, 2, 3)
;
3。)用户1执行另一个SELECT * FROM v;
用户1在注销并重新登录之前无法看到用户2中插入的行。
似乎视图不会在“会话”中同步?如何才能使用户1可以看到INSERT?
仅供参考我正在使用python和mysqldb。
答案 0 :(得分:1)
用户2可以简单地提交他们的交易,而不是注销并重新登录。
MySQL InnoDB表使用事务,在一个或多个SQL语句之前需要BEGIN,之后需要COMMIT或ROLLBACK,导致所有更新/插入/删除都发生。但是有一个“功能”,如果没有明确发出,会导致自动BEGIN,并在连接关闭时产生自动COMMIT。这就是您在其他用户关闭连接后看到更改的原因。
你应该养成明确开始和提交事务的习惯,但还有另一种方法:set connection.autocommit = True,这将导致每个sql update / insert / delete被包装在它自己的隐式事务中,导致您最初期望的行为。
不要把我上面所说的完全是事实上正确的,但它足以解释正在发生的事情以及如何控制它的基本原理。
答案 1 :(得分:0)
是否与使用MySQL UPDATE命令有关? http://dev.mysql.com/doc/refman/5.0/en/update.html